PHP5 - 将类属性作为函数调用时出错

时间:2018-05-01 13:11:20

标签: php function oop php-5.6

$f = function($v) {
    return $v + 1;
}

echo $f(4);
// output -> 5

以上工作完美无缺。但是,当f是类的属性时,我无法正确地重现这一点。

class MyClass {
    public $f;

    public function __construct($f) {
        $this->f = $f;
    }

    public function methodA($a) {
        echo $this->f($a);
    }
}

// When I try to call the property `f`, PHP gets confused
// and thinks I am trying to call a method of the class ...
$myObject = new myClass($f);
$myObject->methodA(4);

以上将导致错误:

Call to undefined method MyClass::f()

2 个答案:

答案 0 :(得分:5)

我认为问题在于它试图理解

echo $this->f($a);

正如您发现它想要在课程中调用成员函数f。如果将其更改为

echo ($this->f)($a);

它按照你的意愿解释它。

PHP 5.6 感谢ADyson的评论,认为这是有效的

$f = $this->f;
echo $f($a);

答案 1 :(得分:2)

虽然Nigel Ren的回答(https://stackoverflow.com/a/50117174/5947043)将在PHP 7中运行,但这种稍微扩展的语法也适用于PHP 5:

class MyClass {
    public $f;

    public function __construct($f) {
        $this->f = $f;
    }

    public function methodA($a) {
      $func = $this->f;
      echo $func($a);
    }
}

$f = function($v) {
    return $v + 1;
};

$myObject = new myClass($f);
$myObject->methodA(4);

有关正常工作的演示,请参阅https://eval.in/997686