匿名函数返回类属性? PHP
我正在阅读一篇WordPress教程,其中作者使用了这样的内容(我简化了它):
class WPObject {
public $ID;
public $title;
public $content;
public $status;
public function __construct($wp_post) {
$modifiers = [
'key' => function($k, $v) {
return (substr($k, 0, 5) === "post_") ? substr($k, 5) : $k;
}
];
}
}
该函数应该从wp查询对象中删除post_
前缀。 我的问题是关于我上面发布的功能。 这个匿名函数似乎会返回一个带有属性的对象。 当我做了一个print_r的时候,我得到了...
Array
(
[key] => Closure Object
(
[this] => WPObject Object
(
[ID] =>
[title] =>
[content] =>
[status] =>
)
[parameter] => Array
(
[$k] =>
[$v] =>
)
)
)
我仍然在学习匿名函数,并在想如何/为什么会这样做? 如果你从一个对象中调用一个匿名函数,它是否会创建该对象的一个实例?
另外,如果我使用不正确的术语,则很抱歉。 没有匿名函数,闭包,lambda函数还没有完成。
不是新的实例,它引用了自PHP 5.4以来创建它的相同对象。我相信。 所以闭包本身可以调用该类的属性或方法,就好像在该类中一样。
class foo {
public $bar = 'something';
function getClosure(){
return function(){
var_dump($this->bar);
};
}
}
$object = new foo();
$closure = $object->getClosure();
//let's inspect the object
var_dump($object);
//class foo#1 (1) {
// public $bar =>
// string(9) "something"
//}
//let's see what ->bar is
$closure();
//string(9) "something"
//let's change it to something else
$object->bar = 'somethingElse';
//closure clearly has the same object:
$closure();
//string(13) "somethingElse"
unset($object);
//no such object/variables anymore
var_dump($object);
//NULL (with a notice)
//but closure stills knows it as it has a reference
$closure();
//string(13) "somethingElse"
链接地址: http://www.djcxy.com/p/51695.html
上一篇: Anonymous function returns class properties? PHP
下一篇: Why can anonymous functions defined with `var` be called in global scope?