Verwendung von getingleton () und getModel ()

7

Gibt es eine Reihe von Richtlinien, anhand derer ich entscheiden kann, wann ich sie verwenden soll?

   mage::getModel() and mage::getSingleton()

Soweit ich das beurteilen kann, scheint getSingleton entweder eine vorhandene Instanz eines Modells / einer Klasse abzurufen oder nur dann eine neue Instanz zu erstellen, wenn eine nicht vorhanden ist. Während getModel () eine erstellt, unabhängig davon, was bereits vorhanden ist. Ist das richtig?

Unter der Annahme, dass ich diese richtig verstehe, wäre es nicht sinnvoll, immer mage :: getSingleton () zu verwenden! Es wird offensichtlich nicht oder auf andere Weise getModel () nicht verwendet. Wann sollte ich jeden verwenden?

Was ist der Hauptvorteil bei korrekter Verwendung? Sollte es die Leistung verbessern, Doppelarbeit vermeiden oder allgemein bewährte Verfahren anwenden?

entwickler
quelle

Antworten:

15

Ja, getSingleton gibt dieselbe Instanz zurück, daher möchten Sie sie nicht immer verwenden, sondern nur, wenn Sie mit derselben Instanz leben können.

Beispiel dafür, wann ein Singleton NICHT verwendet werden soll:

$product = Mage::getModel('catalog/product');
$product->setSku("asdfasdf");
$product->setName("First Test Product");
$product->save();

$product = Mage::getModel('catalog/product');
$product->setSku("asdfasdf2");
$product->setName("Second Test Product");
$product->save();

Dadurch entstehen zwei Produkte. Wenn Sie jedoch Singleton verwenden, wird nur ein Produkt erstellt, das zweite überschreibt das erste.

mpaepper
quelle