搜索了几个小时后,我偶然发现了method exists,function exists,magic methods以及许多其他手册,论坛帖子和博客,但它们对我来说不够清晰或者不是我正在寻找的东西。在this stack overflow question和as well as this one中,它们几乎就是我要查找的内容,只有它们会针对静态方法名称检查method_exists
。
这是我的问题:
我希望我的类中的一个方法在FunctionName
调用时检查类MyClassName
内是否存在$foo = new MyClassName(); $foo->FunctionName();
,如果不存在,则回显"测试!&#34 ;.换句话说,如果被调用的方法不存在于MyClassName
中,则回显"测试!"。
我知道我可以使用像$foo = new MyClassName();
这样的对象来检查它,但我正在我的班级中寻找可以做到的方法/函数。
非常感谢!
答案 0 :(得分:2)
您的搜索确切地将您带到了您需要去的地方。
如果在类定义中实现__call方法(请参阅您提供的魔术方法链接),当方法不可访问时(不存在或是私有的或受保护的,将取决于您是否正在调用)分别来自子类的方法)。
答案 1 :(得分:0)
您要找的是magic method __call()
和函数method_exists()。
请执行以下操作:
public function __call($name, $arguments) {
if(!method_exists($this, $name)) {
echo "Method does not exist [called method '$name' with parameters". implode(', ', $arguments). "]\n";
}
}