草庐IT

Closures

全部标签

PHP 类型提示不起作用

我正在尝试在我的应用程序中使用类型提示功能,但有些地方无法正常工作。我尝试了以下define('PULSE_START',microtime(true));require('../Pulse/Bootstrap/Bootstrap.php');$app=newApplication();$app->run();$app->get('/404',function(Application$app){$app->error(404);});我得到的不是404输出Catchablefatalerror:Argument1passedto{closure}()mustbeaninstanceof

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 - PHP 匿名函数中静态变量的作用域

我遇到了一些麻烦,当我在一个方法中定义一个静态变量并多次调用它时,代码如下:functiontest(){static$object;if(is_null($object)){$object=newstdClass();}return$object;}var_dump(test());echo'';var_dump(test());输出如下:object(stdClass)[1]object(stdClass)[1]是的,他们返回相同的对象。但是,当我定义一个闭包结构时,它返回的不是同一个对象。functiontest($global){returnfunction($param)us

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的Closure对象如何读取呢?

我有这段代码,但我卡住了...$my_var=function(){returnarray('helloyou');};var_dump($my_var);//returnsobject(Closure)#2(0){}如何echo$my_var?我假设它是echo$my_var[0];但这不起作用。fatalerror:无法将Closure类型的对象用作...中的数组 最佳答案 闭包是一个函数。因此你必须这样调用它:$myvar();自带有数组访问的php5.4之后:echo$myvar()[0];

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引用。一个闭包(一个闭包对象,如果你愿意的话,因为它们就是这样!)只存

Closure 的 PHP 强制实例,有点像

引用PHP:AnonymousfunctionsarecurrentlyimplementedusingtheClosureclass.Thisisanimplementationdetailandshouldnotbereliedupon.也就是说,以下检查被认为是不可靠的:functionmyFunction(Closure$callback){}if(!($callbackinstanceofClosure)){}这让我们开始使用is_callable()。这很好,但是如果有人需要一个真正的“闭包”,(作为一个参数,或者类似的)那么is_callable()不够严格。以下当然会为

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