我正在查看codebird-php git,并注意到作者有一种方法可以检测未在类本身中声明的方法。例如,他有
cb -> statuses_homeTimeline ();
成功执行,尽管在Codebird类中没有称为statuses_homeTimeline()
的方法。
我试着寻找关于这种类型的结构的信息,但不知道它叫什么,我没有找到任何东西。
它通常被称为什么(我已经谷歌了"变量方法","映射方法"等的所有变体)?有反对使用它的理由吗?它(原则上)是如何工作的?
我发现了一堆关于__call
和你可以用它做的事情的问题,但没有关于__call
实际上是什么。
PHP对象有许多魔术方法。最著名的是__construct
。
__call
是一个神奇的方法,当你试图调用一个不存在的方法时,它会被调用。这是一种方法的"包罗万象"。
技术术语是"方法重载"。
当$cb->statuses_homeTimeline()
被调用时,如果该方法不存在,它将调用$cb->__call("statuses_homeTimeline",array())
__call()
魔术方法。__call()
在对象上下文中调用不可访问的方法时触发。