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

$inst->test();

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

我的问题:有什么理由不应该这样做吗?是否有任何极端情况、隐藏的警告,或者它的行为是否像任何常规函数/方法?

最佳答案

这应该不起作用,因为您的类中没有 __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

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

关于php - 是 $this->__invoke();在 PHP 中 100% 安全有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29727913/

10-12 05:29