2013-03-22 23 views
1

我正在挖掘一些Magento代碼。PHP類可以包含未通過函數get_class_methods列出的方法嗎?如果是這樣,怎麼樣?如果不是,它爲什麼會出現?

我期待在類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()結果集?

回答

2

聽起來像getSortOrder()是一種重載的方法。 See here for more info on overloading。 (因此也沒有辦法知道他們)

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

get_class_methods()不會因爲他們是在現場創建稱爲時顯示重載的方法有很多框架使用重載:從鏈接取吸氣劑。

順便說一句,請參閱this answer瞭解如何實現超載的一個例子。

相關問題