php闭包或匿名函数用于创建函数而不指定其名称.
是否可以像在JavaScript中那样分配标识符来调用它们?例如
(function(){
echo('anonymous function');
})();
Run Code Online (Sandbox Code Playgroud)
use
在定义匿名函数时构造的正确用法是什么?在具有私有属性可访问性的公共方法中,匿名函数的状态是什么?
$anon_func =
function($my_param) use($this->object_property){ //use of $this is erroneous here
echo('anonymous function');
};
Run Code Online (Sandbox Code Playgroud)
ste*_*red 20
call_user_func(function() use(closure-vars){ ... });
Run Code Online (Sandbox Code Playgroud)
jba*_*ord 20
PHP 7增加了执行此操作的能力.
这段代码:
(function() { echo "This works as expected in PHP 7.\n"; })();
Run Code Online (Sandbox Code Playgroud)
在PHP 7中可以正常工作.(它仍然不适用于任何PHP 5.x.版本)
Nul*_*ion 11
是否可以像在JavaScript中那样分配标识符来调用它们?例如
不是PHP 5.x; 除非你的方法将回调作为参数时计算它.例如:
$square = array_map(function ($v) { return $v*$v; }, $array);
Run Code Online (Sandbox Code Playgroud)
定义匿名函数时使用构造的正确用法是什么
该use
关键字指示从当前词法作用域变量应该被导入到闭合.您甚至可以通过引用传递它们并更改传递的变量,例如:
$total = 0;
array_walk($array, function ($v) use (&$total) { $total += $v; });
// $total is now the sum of elements in $array
Run Code Online (Sandbox Code Playgroud)
具有私有属性可访问性的公共方法中匿名函数的状态是什么?
一个类中定义闭包可以完全访问其所有属性和方法,包括不需要输入私房$this
通过关键字use
在PHP 5.4:
// this works fine in PHP 5.4
$anon_func =
function($my_param) {
$thing = $my_param + $this->object_property;
echo('anonymous function');
};
Run Code Online (Sandbox Code Playgroud)
请注意,由于某些奇怪的原因,在PHP 5.3中删除了$this
对闭包的支持.在此版本中,您可以使用以下方法解决此限制:
// a workaround for PHP 5.3
$temp = $this;
$anon_func =
function($my_param) use ($temp) {
$thing = $my_param + $temp->object_property;
echo('anonymous function');
};
Run Code Online (Sandbox Code Playgroud)
但这只允许您访问公共成员,尝试访问私有成员仍然会给您一个错误.
另请注意,无论PHP版本如何,尝试导入$this
(via use
)都会导致致命错误Cannot use $this as lexical variable
.
归档时间: |
|
查看次数: |
9404 次 |
最近记录: |