1

私はいくつかのMagentoコードを掘り下げています。

私はクラスを見ていますMage_Catalog_Model_Session

次のようなクラスMage_Catalog_Block_Product_List_Toolbar extends Mage_Core_Block_Template関数のコードがあります。getCurrentOrder

Mage :: getSingleton('catalog / session')-> 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()結果セットに表示されないのはどうしてですか。 ?

4

1 に答える 1

2

getSortOrder()オーバーロードされたメソッドのように聞こえます。オーバーロードの詳細については、ここを参照してください。リンクから取得:

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

get_class_methods()オーバーロードされたメソッドは、呼び出されたときにその場で作成されるため表示されません(したがって、それらについて知る方法はありません)。多くのフレームワークは、ゲッターにオーバーロードを使用します。

ところで、ゲッターの過負荷がどのように達成されるかの例については、この回答を参照してください。

于 2013-03-22T23:31:35.217 に答える