php闭包或匿名函数用于创建函数而不指定其名称。
是否可以像在JavaScript中那样分配标识符来调用它们? e.g。
(function(){
echo('anonymous function');
})();
定义匿名函数时use
构造的正确用法是什么?私有属性可访问的公共方法中匿名函数的状态是什么?
$anon_func =
function($my_param) use($this->object_property){ //use of $this is erroneous here
echo('anonymous function');
};
答案 0 :(得分:20)
call_user_func(function() use(closure-vars){ ... });
答案 1 :(得分:20)
PHP 7增加了执行此操作的能力。
此代码:
(function() { echo "This works as expected in PHP 7.\n"; })();
在PHP 7中可以正常工作。(它仍然无法在任何PHP 5.x.版本中使用)
答案 2 :(得分:11)
是否可以不用来打电话 像我们一样分配给标识符 JavaScript? e.g。
不在PHP 5.x中;除非你的方法将回调作为参数时计算它。例如:
$square = array_map(function ($v) { return $v*$v; }, $array);
使用的正确用法是什么 在定义匿名时构造 功能
use
关键字指示应将当前词法范围中的哪些变量导入到闭包中。您甚至可以通过引用传递它们并更改传递的变量,例如:
$total = 0;
array_walk($array, function ($v) use (&$total) { $total += $v; });
// $total is now the sum of elements in $array
匿名的状态是什么 公共方法中的函数 私人财产的可访问性?
在类中定义的闭包具有对其所有属性和方法的完全访问权限,包括私有属性和方法,无需通过PHP 5.4中的关键字$this
导入use
:
// this works fine in PHP 5.4
$anon_func =
function($my_param) {
$thing = $my_param + $this->object_property;
echo('anonymous function');
};
请注意,由于某些奇怪的原因支持$this
关闭was removed in PHP 5.3。在此版本中,您可以使用以下内容解决此限制:
// a workaround for PHP 5.3
$temp = $this;
$anon_func =
function($my_param) use ($temp) {
$thing = $my_param + $temp->object_property;
echo('anonymous function');
};
但这只允许您访问公共成员,尝试访问私人成员仍然会给您一个错误。
另请注意,无论PHP版本如何,尝试导入$this
(通过use
)都会导致致命错误Cannot use $this as lexical variable
。
答案 3 :(得分:3)
看起来不像,因为它们仍然必须使用function() {}
表示法声明,并且在我的5.3.2安装上,尝试使用示例概念会返回unexpected '('
语法错误。封闭上的doc page也没有提到它。
一旦他们修补解析器以允许somefunction()[2]
数组解除引用,它们就有可能成为可能。