Was ist der Unterschied zwischen getData ('name') und getName ()

7

Ich benutze Magento 1.8

Und ich habe Probleme, wenn ich die folgenden Methoden verwende

$product->getData('name');

$product->getName();

Sind sie gleich, bin ich sicher, dass sie den gleichen Wert zurückgeben [Antwort]. Wenn ich benutze, erhalte ich eine Fehlermeldung

Fatal error: Call to a member function getData() on a non-object in

Darf ich den genauen Unterschied zwischen diesen beiden Funktionen kennen?

Vielen Dank,

Charlie
quelle

Antworten:

11

Sie können gleich oder unterschiedlich sein. Dies hängt von dem verwendeten Objekt ab.

Wenn die Klasse die Methode instanziiert enthält getName()dann das Ergebnis , das Sie von bekommen getNameund getData('name')kann unterschiedlich sein.
Sie können sogar einen Fehler erhalten, wenn die Klasse nicht erweitert wird Varien_Objectund nicht über die Methode verfügt getData.

Für Klassen, Varien_Objectdie die Methode erweitern und nicht enthalten, sind getName()die Ergebnisse der beiden Methoden identisch.
Varien_Objectimplementiert die Methode __call, die aufgerufen wird, wenn eine bestimmte Methode nicht vorhanden ist. Sehen Sie hier, wie der Code aussieht .

Es ordnet also grundsätzlich den Aufruf einer beliebigen Methode getSomethingHere()zu getData('something_here'). Es funktioniert genauso für „fake“ Methoden , die mit beginnen set, hasund uns.

Weitere Details finden Sie hier.

Marius
quelle
Gute Erklärung @ Marius, ich gebe dir Upvote
Amit Bera
@AmitBera. Vielen Dank. das gleiche für dich von meiner Seite.
Marius
4

Daten empfangen():

In den meisten Fällen ist dies die Methode, die Sie verwenden sollten. Von den beiden Optionen ist diese tatsächlich schneller und effizienter. Wenn Sie die Ausgabe nicht ändern müssen und nur den Wert anzeigen möchten, verwenden Sie getData (). Es gibt jedoch Attribute, die mit getData () möglicherweise nicht ordnungsgemäß funktionieren, z. B. den Produktpreis. Obwohl ich es noch nicht getestet habe, wird getData ('name') höchstwahrscheinlich andere Ergebnisse liefern als getName ().

getAttributeName ()

Sie sollten diese Methode wirklich nur verwenden, wenn Sie die Methode in Ihrem Block überschreiben müssen, um der Anzeige / Formatierung der Daten Funktionen hinzuzufügen. Magento muss beim Rendern der Daten einige zusätzliche Schritte ausführen, wenn Sie diese Methode verwenden. Dies ist daher etwas langsamer als das Anzeigen von Daten mit getData (). Mit $ _product-> getName () kann ich dem Produktansichtsblock eine Funktion hinzufügen, um beispielsweise die Daten zu ändern, bevor sie ausgegeben werden

Einige Details: /programming/3541273/magento-getsku-or-getdata-sku-returns-empty-string

Amit Bera
quelle
1
Ich verwende immer die zweite Methode, weil Sie nie wissen, wann jemand anderes eine Außerkraftsetzung vornehmen möchte. Es ist ein wichtiger Teil der Zusammenarbeit.
Uhrwerk
Können Sie bitte meine Antwort bearbeiten
Amit Bera
Ich denke nicht, dass es notwendig ist, Ihre Antwort zu ändern, da ich nur meine Meinung hinzugefügt habe.
Uhrwerk