gpt4 book ai didi

php - 如何检查它是否是魔术方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:35 25 4
gpt4 key购买 nike

我试图在反射类中找到一个魔术方法的检查,但它不存在。也许 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 不提供检查方法是否神奇的方法,因此您有两个选择。

文档是这么说的

PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality.

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com