可以PHP类包含方法不列出函数' get_class_methods ' ?如果有,怎么做?如果不是,为什么看起来是这样


Can PHP class contain method not listed by function `get_class_methods` ? If so, how? If not, why does it appear to?

我正在研究一些Magento代码。

我正在看类Mage_Catalog_Model_Session

Mage_Catalog_Block_Product_List_Toolbar extends Mage_Core_Block_Template类函数getCurrentOrder中有如下代码:

法师:getSingleton(目录/会话)-> getSortOrder ();

现在,Mage::getSingleton('catalog/session')返回类型为Mage_Catalog_Model_Session的对象

所以我认为getSortOrder()是那个类的一个方法,尽管这个方法似乎会与这个工具栏类一起使用,而不是那个会话类。

这一行应该给我类的方法列表:

print_r(get_class_methods(get_class($_test)));

它似乎是,但getSortOrder()没有列出。

那么,getSortOrder()是哪个类的成员,它是如何a)看起来是它不是类的成员,或者b)是该类的成员,但没有出现在get_class_methods()的结果集中?

听起来像getSortOrder()是一个重载方法。有关重载的更多信息,请参阅此处。摘自链接:

Overloading in PHP provides means to dynamically "create" properties and methods.

get_class_methods()不会显示重载方法,因为它们是在调用时当场创建的(因此没有办法知道它们)。很多框架对getter使用重载。