【问题标题】:Access instance object inside Closure PHP访问闭包 PHP 中的实例对象
【发布时间】:2018-08-16 00:24:28
【问题描述】:

我想访问 $a 对象方法 myMethod() 以及覆盖函数内的所有 $a 对象属性。我该怎么做?非常感谢您的帮助。

$a = new A('property');
$a->testFunc = Closure::bind(function() {
    // here the object scope was gone...
    $a->myMethod();
    $this->var = "overridden";
}, $a);

【问题讨论】:

  • 在函数内部声明$a全局。
  • 您也可以在定义函数时使用use 关键字。 function() use ($a) { ... }。这将包含函数范围内的变量,而不使其成为全局变量。
  • @KarloKokkak 此外,global $a 仅在您处于全局范围内时才有效。如果这已经在另一个函数的范围内,则必须在两个范围内定义 $a global(首先将其提升到全局,然后在全局后访问它)。无论如何,global 被认为是不好的做法。

标签: php closures


【解决方案1】:

您可以在定义函数时使用use 关键字,如下所示:

$a = new A('property');
$a->testFunc = Closure::bind(function() use ($a) {
    // here the object scope was gone...
    $a->myMethod();
    $this->var = "overridden";
}, $a);

这将告诉 php 将 $a 包含在您的函数范围内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多