gpt4 book ai didi

php - 在 PHP 5.4.0 之前的匿名函数中使用 `$this`

转载 作者:IT老高 更新时间:2023-10-28 11:55:02 24 4
gpt4 key购买 nike

PHP 手册说明

It is not possible to use $this from anonymous function before PHP 5.4.0

anonymous functions page .但我发现我可以通过将 $this 分配给变量并将变量传递给函数定义处的 use 语句来使其工作。

$CI = $this;
$callback = function () use ($CI) {
$CI->public_method();
};

这是一个好习惯吗?
有没有更好的方法在使用 PHP 5.3 的匿名函数中访问 $this

最佳答案

当您尝试对其调用 protected 或私有(private)方法时,它将失败,因为以这种方式使用它算作从外部调用。据我所知,在 5.3 中没有办法解决这个问题,但是在 PHP 5.4 中,它会按预期工作,开箱即用:

class Hello {

private $message = "Hello world\n";

public function createClosure() {
return function() {
echo $this->message;
};
}

}
$hello = new Hello();
$helloPrinter = $hello->createClosure();
$helloPrinter(); // outputs "Hello world"

更重要的是,您将能够更改 $this 在运行时指向的内容,用于匿名函数(闭包重新绑定(bind)):

class Hello {

private $message = "Hello world\n";

public function createClosure() {
return function() {
echo $this->message;
};
}

}

class Bye {

private $message = "Bye world\n";

}

$hello = new Hello();
$helloPrinter = $hello->createClosure();

$bye = new Bye();
$byePrinter = $helloPrinter->bindTo($bye, $bye);
$byePrinter(); // outputs "Bye world"

实际上,匿名函数将具有 bindTo() method ,其中第一个参数可用于指定 $this 指向的内容,第二个参数控制可见级别应该是什么。如果省略第二个参数,则可见性就像从“外部”调用一样,例如。只能访问公共(public)属性。还要注意 bindTo 的工作方式,它不会修改原始函数,它会返回一个新函数

关于php - 在 PHP 5.4.0 之前的匿名函数中使用 `$this`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com