是$ this-> __ invoke();在PHP中100%安全有效?

时间:2015-04-19 09:11:31

标签: php class magic-methods

// in class
public function test () {
    $this->__invoke();
}

$inst->test();

此测试运行时没有任何错误。

我的问题:有什么理由不应该这样做吗?是否存在任何角落案例,隐藏警告,或者它是否像任何常规函数/方法一样?

1 个答案:

答案 0 :(得分:3)

由于您的课程中没有__invoke()方法,因此不应该有效:

class SomeClass {
    public function test()
    {
        $this->__invoke();
    }
}

$inst = new SomeClass();
$inst->test();

http://3v4l.org/JOBXn

如果您实施__invoke(),那应该有效:

class SomeClass {
    public function __invoke()
    {
        var_dump('Invoke!');
    }

}

$inst = new SomeClass();
$inst();

http://3v4l.org/mpG5d

可以直接调用魔术方法,正如您在第二次测试中看到的那样,但在我看来,这不是一个好主意,因为它们是某种钩子并且它们的代码可能会意外执行。