PHP闭包函数附加到stdObject并链接

时间:2012-01-12 15:28:10

标签: php closures chaining

  

可能重复:
  Calling closure assigned to object property directly

如果我有这样的课程:

class test{
  function one(){
     $this->two()->func(); //Since $test is returned, why can I not call func()?
  }

  function two(){
    $test = (object) array();
    $test->func = function(){
       echo 'Does this work?';
    };
    return $test;
  }
}

$new = new test;
$new->one(); //Expecting 'Does this work?'

所以我的问题是,当我从函数1调用函数二时,函数2返回$ test变量,该函数附加了一个func()的闭包函数。为什么我不能将其称为链式方法?

修改 我记得这也可以通过对需要的人使用$ this-> func-> __ invoke()来完成。

1 个答案:

答案 0 :(得分:6)

因为这是目前PHP的限制。你在做什么是合乎逻辑的,应该是可能的。事实上,您可以通过编写来解决限制:

function one(){
    call_user_func($this->two()->func);
}

function one(){
    $f = $this->two()->func;
    $f();
}

愚蠢,我知道。