PHP $this 的自动绑定,是复制还是扩展?
PHP automatic binding of $this, is it a copy or an extend?
当使用在 class 上下文中定义的匿名 PHP 函数时,文档说 "the current class is automatically bound to it, making $this
available inside of the function's scope".
但是我有点不明白这是什么意思,它是说匿名函数有一个 class 的副本还是现在是 class 的一部分?因此,如果我使用匿名函数对 class 进行更改,它们将保留在定义匿名函数的原始 class 中?
$this
匿名函数内部的变量 PHP 不是一个副本,而是一个绑定,所以如果你改变匿名函数内部 $this
的内容,父 class 会受到影响。
您可以查看 运行 这段代码:
class Foo
{
private $test = 1;
function __construct()
{
$func = function() {
$this->test = 2;
};
$func();
var_dump($this);
}
};
new Foo();
当使用在 class 上下文中定义的匿名 PHP 函数时,文档说 "the current class is automatically bound to it, making $this
available inside of the function's scope".
但是我有点不明白这是什么意思,它是说匿名函数有一个 class 的副本还是现在是 class 的一部分?因此,如果我使用匿名函数对 class 进行更改,它们将保留在定义匿名函数的原始 class 中?
$this
匿名函数内部的变量 PHP 不是一个副本,而是一个绑定,所以如果你改变匿名函数内部 $this
的内容,父 class 会受到影响。
您可以查看 运行 这段代码:
class Foo
{
private $test = 1;
function __construct()
{
$func = function() {
$this->test = 2;
};
$func();
var_dump($this);
}
};
new Foo();