【问题标题】:How to access parent object from lambda functions?如何从 lambda 函数访问父对象?
【发布时间】:2011-07-08 12:17:21
【问题描述】:

我的一个对象中有一个递归 lambda 函数,它需要访问该对象的 mysqli 连接。这次尝试

$recfunc = function($id, $name) use($this) {

产生了一个不合理的致命错误

致命错误:无法在第 88 行的 C:\Users\Codemonkey1991\Desktop\workspace\melior\objects\databasemanager.php 中使用 $this 作为词法变量

谁能指点一下?


编辑:为了澄清上下文,我试图在另一个函数中创建这个 lambda 函数。

【问题讨论】:

    标签: php class function lambda closures


    【解决方案1】:

    $this 的引用不需要显式传递给 lambda 函数。

    class Foo {
        public $var = '';
    
        public function bar() {
            $func = function() {
                echo $this->var;
            };
            $func();
        }
    }
    
    $foo = new Foo();
    $foo->var = 'It works!';
    $foo->bar(); // will echo 'It works!'
    

    【讨论】:

      【解决方案2】:

      因为闭包本身就是对象,所以需要将$this 分配给一个局部变量,例如:

      $host = $this;
      $recfunc = function($id, $name) use ($host) { ...
      

      【讨论】:

      • 嘿,还有一个问题:我将如何让函数调用自身?
      • $recfunc = function($id, $name) use ($host, &$recfunc) { if (FOO) return $recfunc($id, $name); }
      • 通过检查 bugs.php.net 关于此错误的报告,此功能已添加到 PHP 5.4。
      猜你喜欢
      • 2021-06-09
      • 2018-06-24
      • 1970-01-01
      • 2017-05-08
      • 2019-06-09
      • 2023-03-15
      • 1970-01-01
      • 2017-06-07
      • 2013-11-17
      相关资源
      最近更新 更多