我试图在反射类中找到一个魔法方法的检查,但它不存在。也许php(我使用的是php 5.3)有其他一些工具可以解决这个问题?像这样的东西:

class myClass {

    public function __call($method, $arguments)
    {
        return 'is magic';
    }

    public function notMagic()
    {
        return 'not a magic';
    }

}


$reflection = new ReflectionMethod('myClass', 'magic');

if ($reflection->isMagic())
{
    /* do something if is magic*/
}

最佳答案

由于 PHP 没有提供一种方法来检查一个方法是否具有魔力,因此您有两个选择。

文档说



因此,您可以检查方法名称是否以 __ 开头:

if(strpos($methodName, '__') === 0){
    echo "$methodName is magic";
}

这样做的缺点是有人可以创建一个方法 __myNewMethod 并且它会被认为是神奇的,尽管 PHP 实际上没有用它做任何事情。

或者,您可以拥有姓名白名单。同样,根据文档,以下方法很神奇:
__construct(), __destruct(), __call(), __callStatic(),
__get(), __set(), __isset(), __unset(), __sleep(),
__wakeup(), __toString(), __invoke(), __set_state() and __clone()

这种方法的缺点是 future 版本的 PHP 可能会在此列表中添加和删除,从而使代码不正确。

选择可能取决于您希望如何使用此信息。

PHP Magic Methods

关于php - 如何检查它的魔法方法与否?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21723345/

10-10 21:01