草庐IT

php - PHP 闭包是坏了还是我遗漏了什么?

我一直在阅读PHP5.3的新特性,其中一个主要特性是闭包。除非我大错特错,否则PHP开发人员要么是:a)将闭包与匿名函数混淆b)在我正在测试的PHP5.3.1中闭包被破坏来自whatwikipediasays闭包是匿名函数的机制加上函数的父作用域变量到函数作用域的绑定(bind)。最后一部分在PHP中似乎有问题。奇怪的是,我检查了PHP错误,但对此一无所获。这是我的测试方式:在实际实现闭包的语言中,它返回2:deff():x=2returnlambda:xprint(f()())#prints2和alert((function(){varx=2;returnfunction(){ret

php - 推导 PHP 闭包参数

我是否有机会推断出PHPClosure参数类型信息?考虑这个例子:5,'b'=>10]);}else{call_user_func($closure,5,10);}?>我想给用户留一些自由,这样他或她可以决定哪种方式更好地定义将在我的调度程序中注册的闭包——它是接受关联数组中的参数还是直接作为闭包参数。因此,dispatcher需要推断传递的Closure的参数,以确定它应该以哪种方式调用此Closure。有什么想法吗? 最佳答案 使用reflection,如果您需要根据代码结构做出决定。在你的情况下ReflectionFuncti

php - 如何在 php 的闭包中使用 $this

我有这样的功能:classService{functiondelete_user($username){...$sessions=$this->config->sessions;$this->config->sessions=array_filter($sessions,function($session)use($this){return$this->get_username($session->token)!=$username;});}}但这行不通,因为你不能在use中使用$this,是否可以在回调中执行属于Service类成员的函数?还是我需要使用for或foreach循环?

闭包中的 PHP undefined variable

以下代码片段返回一堆输入字段,但我无法设置它们的值,因为$data未定义(它在闭包内)。$row=array_map(function($n){$name=sprintf('point[%0d]',$n+1);$value=$data['measurements'][$n];returnform_input($name,$value,"class='input-mini'");},range($i*6,$i*6+5));我知道全局变量并不酷。解决这个问题的最佳方法是什么? 最佳答案 Inheritingvariablesfromth

php - Laravel - 从数据库事务闭包中获取变量

我正在使用Laravel5LAMP堆栈,我正在尝试使用数据库事务处理CSV导入。代码如下所示://Shouldcontainanymessagestopassbacktotheuser$results=[];//Containsthetotalrecordsinserted$total=0;DB::transaction(function()use($csv_file,$results,$total){//SomeCode...$total++;$results[]='Row10hassomeweirddata...';});returnview('plan.import')->wit

php - 将 create_function 用作闭包时从包含作用域引用变量。 PHP

使用真正的闭包,我们可以做到,functionfoo(&$ref){$inFn=function()use(&$ref){$ref=42;};$inFn();}因此无需在对$inFn的调用中将其传递即可修改引用。如果我们替换,$inFn=function(...与$inFn=create_function(...是否有任何(简单而干净的)方法来做同样的事情;通过引用引用包含范围的变量没有显式传递它到$inFn? 最佳答案 我遇到了thisanswertoanotherquestion这启发了我想出以下内容。我没有对它进行过大量测试,

php - 确定闭包在 PHP 中是否是静态的

在PHP中定义的闭包也可以携带static修饰符。$f=function(){};$g=staticfunction(){};无法通过Closure::bind绑定(bind)静态闭包或Closure::bindTo,并会发出警告。$g=Closure::bind(staticfunction(){},newstdClass());//Warning:Cannotbindaninstancetoastaticclosurein...这也是通过使用ReflectionMethod::getClosure反射(reflect)静态方法创建的闭包的情况。.classMyClass{publi

functional-programming - 为什么 array_map 在闭包引发异常时抛出警告?

我最近再次开始使用PHP编程,在长期使用其他语言之后,我开发了一种更实用的风格-我希望尝试并保持这种风格。我注意到一些奇怪的行为,我设法将其提取到一个测试用例中,希望有人能解释。$func=function($item){if($item==0)thrownewException("Can'tdo0");return$item;};try{array_map($func,array(1,2,3,0,5));}catch(Exception$ex){echo"Couldn'tmaparray";}当执行上面的代码时,我看到以下输出:Warning:array_map():Anerroro

php - 是否可以从 PHP 中的闭包返回引用?

为了从PHP中的函数返回引用,必须:...usethereferenceoperator&inboththefunctiondeclarationandwhenassigningthereturnedvaluetoavariable.这最终看起来像:function&func(){return$ref;}$reference=&func();我正在尝试从闭包中返回一个引用。在一个简化的例子中,我想要实现的是:$data['somethinginteresting']='Oldvalue';$lookup_value=function($search_for)use(&$data){re

PHP闭包范围问题

显然$pid超出了这里的范围。它不应该在功能中“关闭”吗?例如,我相当确定这就是闭包在javascript中的工作方式。根据一些文章phpclosuresarebroken,所以我无法访问这个?那么如何从这个闭包函数访问$pid呢?classMyClass{staticfunctiongetHdvdsCol($pid){$col=newPointColumn();$col->key=$pid;$col->parser=function($row){print$pid;//Undefinedvariable:pid};return$col;}}$func=MyClass::getHdvd