草庐IT

php - 闭包如何帮助创建 DSL/fluent 接口(interface) : PHP examples?

您能给我一个PHP示例,说明闭包如何有助于创建DSL(流畅的接口(interface))吗?编辑:以下问题中接受的答案讲述了嵌套闭包。如果有人可以将该示例翻译成PHP,那也会有所帮助:Experiencewithfluentinterfaces?Ineedyouropinion! 最佳答案 这是我能想到的第一个例子,它不是很好,但它给了你一个想法:$db=newDatabase();$filteredList=$db->select()->from('my_table')->where('id',9)->run()->filter(

php - 类中的闭包数组

看来您不能在类的范围内定义一组可调用方法。为什么不呢?为什么这是有效的PHP(参见http://3v4l.org/1JeQr)$methods=array(1=>function($subject,$value){return($subject==$value);});var_dump($methods[1]('a','a'));但不是这个(参见http://3v4l.org/FL449)classFoo{publicstatic$methods=array(1=>function($subject,$value){return($subject==$value);});}var_du

php - 调用闭包时的奇怪行为

我想知道为什么这不起作用:(PHPfatalerror:调用未定义的方法stdClass::y())$x=newstdClass;$x->y=function(){return'hi';};echo$x->y();但这行得通:$x=newstdClass;$x->y=function(){return'hi';};$y=$x->y;echo$y();echo($x->y)();也返回Parseerror:syntaxerror,unexpected'(',expecting','or';'无效.那么,在没有中间变量的情况下调用y闭包属性的正确方法是什么。 最

php - 使类的静态成员成为函数(闭包)不起作用

(PHP7)考虑下面的代码,它试图将一个函数分配给一个变量,然后确保它只被调用一次。classa{staticpublic$b;staticpublicfunctioninit(){self::$b();self::$b=function(){};}}a::$b=function(){echo'HereIdoveryheavystuff,butwillhappenonlyinthefirsttimeIcallinit()';};for($i=0;$i在php7中,它会给出一个错误,它期望a::$b是一个字符串(要调用的函数名)。如果我使用纯变量而不是静态成员,它会起作用。我的问题是,这

php - 如何确定 PHP 中闭包/匿名函数的参数数量

如何确定闭包声明的参数数量,以便在闭包之外使用?例如:$myClosure=function($arg1,$arg2,$arg3){}$numArgs=someMagicalFunction($myClosure);echo("thatclosureexpects$numArgsarguments");是否有一些功能可以满足我的需要? 最佳答案 使用反射。参见这篇文章:http://www.bossduck.com/2009/07/php-5-3-closures-and-reflection/$func=function($one

php - 不能调用包裹在闭包中的闭包?

如果我将一个闭包包裹在另一个闭包中,我将无法调用嵌套的闭包。为什么不?我认为一个例子最能说明问题。这段PHP代码:functionFInvoke($func){$func();}FInvoke(function(){echo"DirectInvokeWorked\n";});按预期工作并打印“DirectInvokeWorked”。但是,如果我稍微修改它以添加另一个间接级别,它就会失败:functionFInvoke($func){$func();}functionFIndirectInvoke($func){FInvoke(function(){$func();});}FIndire

php - 您怎么知道要在闭包中放入哪些参数/参数?

闭包什么时候有参数(或者带参数的闭包如何工作)?我知道use()用于在匿名函数之外导入变量,但是闭包本身的参数呢? 最佳答案 带参数的闭包的一个例子是柯里化(Currying):functiongreeter($greeting){returnfunction($whom)use($greeting){//greetingistheclosedovervariablereturn"$greeting$whom";};}$hello_greeter=greeter('hello');echo$hello_greeter('world'

匿名函数中的 php 闭包和引用 &

我有:functionoutside($limit){$tally=0;returnfunction()use($limit,&$tally){$tally++;if($tally>$limit){echo"limithasbeenexceeded";}};}$inside=outside(2);$inside();$inside();$inside();输出:已超出限制我的理解:在$inside=outside(2);这会返回匿名函数并且将其分配给变量$inside。匿名函数使用$limit(2)和$tally(0)的值。函数$inside()被调用。这会将$tally增加到1值会以

php - PHP 闭包对象是否符合垃圾回收条件

我想知道是否有人知道PHP的匿名函数是否符合垃圾回收条件?我知道使用create_function创建的函数不会被垃圾回收,但我无法找到关于使用function(){}语法创建的函数的任何引用(在内部表示为闭包对象)。 最佳答案 PHP的垃圾收集器不区分“事物”的类型——如果它在某处至少有一个引用,它就会被保留。如果这不适用,资源将被垃圾收集。这与使用create_function不相同,因为PHP除了引用它之外,还会在全局范围内抛出create_function引用。一个闭包(一个闭包对象,如果你愿意的话,因为它们就是这样!)只存

PHP 闭包给出了奇怪的性能行为

今天早些时候,我正在开发PHP5.3+应用程序,这意味着我可以自由使用PHP闭包。太好了,我想!然后我遇到了一段代码,其中使用函数式PHP代码会使事情变得容易得多,但是,虽然我心中有一个合乎逻辑的答案,但它让我想知道直接调用中的闭包对性能有何影响array_map()并将其作为变量向下传递。IE。以下两个:$test_array=array('test','test','test','test','test');array_map(function($item){return$item;},$test_array);和$test_array=array('test','test','t