首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎么才能验证这是魔术法呢?

怎么才能验证这是魔术法呢?
EN

Stack Overflow用户
提问于 2014-02-12 09:13:21
回答 1查看 957关注 0票数 4

我试图在反射类中找到一个神奇方法的检查,但它不在那里。也许php (我正在使用php5.3)还有其他一些工具来解决这个问题?就像这样:

代码语言:javascript
复制
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*/
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 13:06:34

因为PHP没有提供一种检查方法是否神奇的方法,所以您有两个选项。

医生说

PHP保留以__开头的所有函数名,都是神奇的。建议您不要在PHP中使用__函数名,除非您需要一些记录在案的神奇功能。

因此,您只需检查方法名称是否以__开头。

代码语言:javascript
复制
if(strpos($methodName, '__') === 0){
    echo "$methodName is magic";
}

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

或者,您可以有一个名称的白名单。同样,根据文档,以下方法是神奇的:

代码语言:javascript
复制
__construct(), __destruct(), __call(), __callStatic(), 
__get(), __set(), __isset(), __unset(), __sleep(), 
__wakeup(), __toString(), __invoke(), __set_state() and __clone() 

此方法的缺点是,将来的PHP版本可能会添加或删除此列表,从而使代码不正确。

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

PHP魔术方法

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21723345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档