0

シナリオは次のとおりです。magento のモデルを使用していて、magento でオブジェクトのさまざまなパラメーターを取得するために使用できるメソッドを知りたいとします。

例を見てみましょう:

$order = `Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());`

この例では、注文オブジェクトを使用しています。

さまざまなトピックで検索を行った結果、この特定のオブジェクトから利用できるさまざまなメソッドがいくつかあることがわかりました。たとえば、次のようになります。

getCustomer()
getCustomerName()
getGrandTotal()
getId()

上位 3 つのサンプル メソッドは実際には mage_core_model_sales_order クラスまたはそれが拡張するクラスの 1 つ内で定義されていると仮定します (おそらく間違っています)。 getId() は特殊なケースです。

メソッドがどこにも定義されていない場合でも、__call() マジック メソッドと連携してオブジェクトからデータを返す自動マジック メソッドです。

Magento の自動メソッドの命名規則について説明してください

また、特定のモデルまたはコレクションから利用可能なすべての自動魔法の方法を決定する最も簡単な方法は何ですか.

4

2 に答える 2

2

簡単に言えば (これはインターネット上のさまざまな場所で文書化されているため)、魔法の方法はデータの設定と取得のためのものです。これらの呼び出し

$this->setSomeThing('value');
$this->getSomeThing();

これらの呼び出しと同等です

$this->setData('some_thing','value');
$this->getData('some_thing');

文字列'some_thing'はデータ キーです。マジック メソッドでデータを設定および取得するには、このキーを「SomeThing」に CamelCased にします。

「getData」へのパラメーターなしの呼び出しで、すべてのデータ プロパティを表示できます (したがって、魔法のメソッドを導出できます)。

var_dump( $this->getData() );

var_dumpを使用していない場合xDebugや、多くの Magento オブジェクトが大きすぎたり、円形すぎて完全に表示できない場合は注意してください。その問題に遭遇した場合は、次のようにしてキーを覗くことができます

var_dump( array_keys($this->getData()) );

Magento で使用できる魔法のメソッドはこれですべてです。つまり、データの取得と設定です。

Magento ですべてのモデルとブロックが継承するオブジェクトである varien オブジェクトを使用して、これを試してみてください。

$o = new Varien_Object;
$o->setData('foo','bar');
var_dump($o->getData('foo'));
var_dump($o->getFoo('foo'));
var_dump($o->getData());

最後に 1 つ注意してください。オブジェクトのクラスにマジック メソッドと同じ名前で定義されたメソッドがある場合、マジック メソッドは無視されます。何かが魔法のメソッドなのか実際のメソッドなのかを確実に知る唯一の方法は、クラス定義を見ることです。

于 2012-12-06T21:47:01.597 に答える
0

PHP のクラスで使用可能なメソッドをプログラムで決定する必要がある場合は、いくつかの方法があります。

クラスのインスタンスがなく、おそらくクラス名しかない場合は、PHP のリフレクション機能を使用できます: http://php.net/manual/en/book.reflection.php

または、実際にクラスのインスタンスを持っている場合は、インスタンスで使用get_class_methods()して、現在のスコープからインスタンスで使用できるメソッド (定義されたマジック メソッドを含む) のリストを取得できます。

于 2012-12-06T21:36:33.280 に答える