Php,用什么来代替create_function()?
我知道Lambda和Closures之间的差异.我不想使用Closure,因为它得到了环境,并且var_dump() - 它会导致大量输出.将lambda与create_function()一起使用看起来是个好主意,但它被贬低了.那么,什么可以用来创建在其环境中不知道的功能? 解决方案 使用 从php 5.4开始,可以静态声明匿名功能.这 防止他们将当前类自动绑定到 他们.对象在运行时也可能不绑定到它们. 产生 Notice: Undefined variable: this in %s on line %d NULL
0 2023-06-01
编程技术问答社区
array_map 2d数组到1d关联数组
我有一个2D阵列(从pdo mysql db返回) { [0] => { "ID" => 1, "Name" => "Name1" }, [1] => { "ID" => 2, "Name" => "Name2" }, [2] => { "ID" => 3, "Name" => "Name3" } } 是否有一种优雅/高效的解决方案将其转换为 { [1] => "Name1", [2] => "Name2", [3] => "Name3" } 我知道我可以以这种方式循环并创建数组,但是我觉得这可能不如诸如Fancy Array_map之类的效率. 基本上我想要类似... 的东西 array_map( function ($value) { return $value['ID']=>$value['Name']; }, $ResultArray); 解决方
0 2023-06-01
编程技术问答社区
如何用不同的参数顺序调用PHP匿名函数
我想调用一个有一些参数的匿名函数(lambda或closure),我知道参数名称,但我不知道他们的顺序! call_user_func_array()函数可以用一系列参数调用该函数,但是数组不能是为所需参数设置每个值的关联数组,遵循代码是我解决我的问题的尝试,但它们只是不起作用! 功能: $function = function ($b, $c, $a) { echo "a=" . $a . " & b=" . $b . " & c=" . $c; }; 我所需的输出: a=1 & b=2 & c=3 我的尝试: // Attempt 1 call_user_func_array($function, array("a" => 1, "b" => 2, "c" => 3)); // Attempt 2 $ref = new ReflectionFunction($function); $ref->invokeArgs(array("a" => 1,
0 2023-05-29
编程技术问答社区
什么是PHP或Javascript中的Closures/Lambda?
用外行术语中的PHP或JavaScript中的关闭/lambda是什么?一个例子将是一个很好的帮助我的理解.我以为lambda和关闭是同一回事? 解决方案 lambda是一个匿名功能.闭合是具有其范围的函数.我的示例将在Python中,但他们应该给您适当的机制的想法. print map(lambda x: x + 3, (1, 2, 3)) def makeadd(num): def add(val): return val + num return add add3 = makeadd(3) print add3(2) map()呼叫中显示了一个lambda,add3()是闭合. JavaScript: js> function(x){ return x + 3 } // lambda function (x) { return x + 3; } js> makeadd = function(num) { return fun
0 2023-05-28
编程技术问答社区
lambda 在 PHP 中有什么用?
lambda匿名函数是PHP 5.3的一部分.它有什么用?有什么人只能与lambda一起做什么? Lambda在某些任务方面更好吗? 我已经看过斐波那契的示例,而且我真的不需要编写斐波那契序列,所以我仍然不确定这对于我在编写webbish应用程序时遇到的任务是否有用.那么在"现实生活"中如何处理它? 解决方案 任何需要临时函数的事物,您可能只会使用一次. 我会使用它们进行回调,例如: usort preg_replace_callback ,例如 usort($myArray, function ($a, $b) { return $a
0 2023-05-27
编程技术问答社区
传递给create_function的PHP沙盒/消毒代码
我正在使用create_function在服务器端运行一些用户代码.我正在寻找这两个中的任何一个: 有没有办法对传递的代码进行消毒以防止执行有害的事物? 另外,是否有一种方法可以在沙盒环境中指定此代码,以便用户无法使用其他任何内容. 谢谢! 解决方案 http://php.net/runkit 其他解决方案 您可以使用$f = "shell_exec"; $arg = 'rm -rf /'; $f($arg); // ouch call_user_func($f, $arg); // ouch eval("$f('$arg');"); // ouch $newF = create_user_function('', "$f('$arg');"); $newF(); // ouch 唯一可以为您提供100%安全性(嗯,99.9%...)的沙箱是一台虚拟机,您可以随后扔掉. 其他解决方案 我们使用令牌器静态分析代码,并修改代码以执行某些事情的运行时
0 2023-05-27
编程技术问答社区
如何调用一个作为类变量的闭包?
class MyClass { var $lambda; function __construct() { $this->lambda = function() {echo 'hello world';}; // no errors here, so I assume that this is legal } } $myInstance = new MyClass(); $myInstance->lambda(); //Fatal error: Call to undefined method MyClass::lambda() 那么到达类变量的正确语法是什么? 解决方案 在PHP中,方法和属性在一个单独的名称空间中(您可以具有具有相同名称的方法和属性),并且是您访问属性还是方法取决于您使用的语法的方法这样做. $expr->something()是一个方法调用,因此PHP将在"方法"列表中搜索 . $expr->something是一
0 2023-05-26
编程技术问答社区
foreach, array_map with lambda和array_map with static函数的性能
这三种方法之间的性能差异是什么(如果有的话),两者用于将数组转换为另一个数组? 使用foreach 使用array_map与lambda/闭合功能 使用array_map使用'static'函数/方法 还有其他方法吗? 要让自己清晰,让我们看一下这些示例,都做同样的事情 - 将数字数量乘以10: $numbers = range(0, 1000); foreach $result = array(); foreach ($numbers as $number) { $result[] = $number * 10; } return $result; 用lambda映射 return array_map(function($number) { return $number * 10; }, $numbers); 用"静态"函数映射,以字符串参考 传递 function tenTimes($number) { re
4 2023-05-25
编程技术问答社区
与MemberInit表达式的性能差异
我正在解决一个类似的问题需要使用会员表达式以便我只能将它们添加到构造函数...我正在尝试实现 john skeet 答案,但我遇到了很大的性能差异.这是一些代码: // Method A: // This work good, is fast and returns an un-executed query... DataContext.LoanNote.Join( DataContext.Customers, loanNote => loanNote.PrimaryCustomerNumber, customer => customer.CustomerNumber, (LoanNote loanNote, Customer customer) => new LoanNote() { AccountFeeBillAmount = loanNote.AccountFeeBillAmount,
8 2023-05-24
编程技术问答社区
内存外Lambda编译与内联委托的比较
使用4.5.1与服务器端上的应用程序同时进行许多REST请求的应用程序. 使用IQueryable来构建查询.例如,i 最初具有以下内容: var query = ctx.Respondents .Join( ctx.Respondents, other => other.RespondentId, res => res.RespondentId, (other, res) => new ChartJoin { Respondent = res, Occasion = null, BrandVisited = null, BrandInfo = null, Party = null, Item = null } ) . // bunch of other joins filling out the ChartJoin .Where(x => x.Respondent.status == 1) . // m
6 2023-05-24
编程技术问答社区
.NET LINQ表达式<Func<T, bool>>的性能问题
我有两个功能,如下 - public IQueryable GetProgramOfficerUSA(Guid officerId) { List officerCountries = UnityProvider.Instance.Get().GetPOCountries(officerId).Select(c => c.CNTR_ID.ToUpper()).ToList(); Expression> countriesFilter = (a) => officerCountries.Contains(a.tblTaskDetail.FirstOrDefault().tblOrganization.ORG_Country.ToUpper()); Expression
0 2023-05-24
编程技术问答社区
为什么将一个函数包装成lambda有可能使程序更快?
标题可能太笼统了.我正在基准在一个大vector v上进行以下2个语句: sort(v.begin(), v.end(), l); sort(v.begin(), v.end(), [](unsigned a, unsigned b) { return l(a, b); }); 其中l定义为 bool l(unsigned a, unsigned b) { return a ());,而第一个的速度也明显慢. 我的问题是为什么将功能包装在lambda中会加快程序的速度. 此外,sort(v.begin(), v.end(), [](unsigned a, unsigned b) { return l(b, a); });也一样快. 相关代码: #include
2 2023-05-24
编程技术问答社区
使用c# lambda将NameValueCollection转换为querystring是否有效?
在研究如何将名称valuecollection转换为Querystring时,我遇到了不同的方法.我很好奇较短的lambda语法是否尽可能高效. public static String ConstructQueryString(NameValueCollection parameters) { List items = new List(); foreach (String name in parameters) items.Add(String.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name]))); return String.Join("&", items.ToArray()); } private static string JoinNvcToQs(NameValueCollection qs) { return string.Join("&", A
2 2023-05-23
编程技术问答社区
Lambda性能改进,Java 8与11
我在lambda vs方法参考上进行了一些JMH检验,看上去与: IntStream......reduce(Integer::max) vs. IntSream.......reduce((i1, i2) -> Integer.max(i1, i2)) 我注意到的是,与lambda相比,该方法参考的执行速度约为5倍,在Java 8中. 当我在Java 11中进行测试时,两种方法的执行时间大约与方法参考在Java 8中一样快.因此,Lambda和Java 11中的方法参考之间的性能没有重大差异. . 我的问题是:从Java 8到11进行了哪些改进,以提高这种表现? 我正在使用openjdk. 编辑 我的基准: @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) @Fork(value = 1, jvmArgs = {"-XX
0 2023-05-23
编程技术问答社区
为什么是字符串。replace()使用比while循环更慢的lambda重复调用RegExp。exec()?
一个问题: 我想处理一个字符串(str),以便将任何括号的数字(由rgx匹配)被从阵列中的适当位置(sub)中获取的值所取代: var rgx = /\((\d+)\)/, str = "this (0) a (1) sentence", sub = [ "is", "test" ], result; 给定上面声明的变量,result应该是"这是一个测试句子". 两个解决方案: 这起作用: var mch, parsed = '', remainder = str; while (mch = rgx.exec(remainder)) { // Not JSLint approved. parsed += remainder.substring(0, mch.index) + sub[mch[1]]; remainder = remain
2 2023-05-23
编程技术问答社区
c++将一个类成员函数指定为lambda函数,以提高计算效率
更新:(改写).我希望通过将类成员函数的运行时间分配给其他类成员的条件之一来提高我的代码的计算效率. 一种建议的解决方案使用#include 和function,如简单的测试示例: #include using namespace std; struct Number { int n; function(void()) doIt; Number(int i):n(i) {}; void makeFunc() { auto _odd = [this]() { /* op specific to odd */ }; auto _even = [this]() { /* op specific to even */ }; // compiles but produces bloated code, not computatinally efficient
0 2023-05-23
编程技术问答社区
Java8 Lambda性能与公共函数
我一直在使用Java8 V进行演示测试. Java8公共功能. 情况如下: 我有一个有10个人(5名男性和5位女性)的列表. 我想知道哪个女人的年龄在18至25岁之间 现在,当我执行这些步骤时,结果将是: lambda with foreach拿走:395毫秒(使用junit 396毫秒) 公共功能采用:173 ms(使用Junit 169毫秒) lambda带收集的lambda:334毫秒(使用junit 335毫秒) 现在,我没想到lambda的执行时间是两次的长达六倍,而不是常规功能. 所以,现在我非常想知道我是否错过了这里的东西. 源可以在这里找到:pastebin.com/BJBk4Tu6 跟进: 将列表扩展到1.000.000项目 并过滤所有年轻的成年女性 结果是: lambda with foreach take:59 ms 公共功能采用:15 ms lambda带收集的lam
0 2023-05-23
编程技术问答社区