Verständnis Shopware()->Db()->query($sql)

Hallo, ich bin relativ neu in Sachen PHP Programmierung. In der Schule haben wir die Grundlagen behandelt und nun möchte ich meine Kenntnisse anhand Shopware ausbauen. Mein 1. Verständnisproblem habe ich mit dem Aufruf Shopware()->Db()->query($sql) ist Db() ein Objekt ind Shopware() welches die Methode query aufruft? Ich habe versucht mithilfe der Klassendokumentation den Sachverhalt aufzuklären, jedoch bin ich ein kompletter Neuling und weiß nicht, wie man diese Dokumentation liest bzw. auf eine solche Frage anwendet. Ich wäre sehr froh, wenn mir einer auf die Sprünge helfen könnte.

Shopware()->Db() ist eine Instanz von Enlight_Components_Db_Adapter_Pdo_Mysql. Da findest du auch die Doku zur query() Methode. Viele Grüße

Vielen Dank, aber ist Db() ein Objekt Shopware()? Ich dachte ein Objekt kann nur Objekte als Argumente übergeben bekommen, nicht das ein Objekt in dem Objekt Shopware() instanziiert werden kann.

Wie bitte?! Viele Grüße

Ich verstehe die Annotation nicht. Für mich ist Shopware() ein Objekt und Db() ein Objekt. In der Schreibweise Shopware()->Db()-> nehme ich an, dass beide verschachtelt sind ist mein Gedankengang richtig?

Hier mal ein kleines Beispiel was dir ggf. zum verstehen hilft. Ist Grundlegend ein Methodenaufruf einer Child Klasse. Beispiel… class Main { public $a; public function \_\_construct() { echo '::Parent Class initiated::'; $this -\> a = 'we are in the parent class'; } } class Child extends Main { public function getA() { return $this -\> a; } } $main = new Main(); $main -\> child = new Child; echo $main -\> child -\> getA();

Das Beispiel habe ich verstanden. Es wird im instanzieren Objekt Main ein neues Objekt child der Klasse Child, welche Main erweitert gebunden und dessen Methode getA gefeuert. Also Main wäre dann verschachtelt. Main Object ( [a] => we are in the parent class [child] => Child Object ( [a] => we are in the parent class ) ) Mein Problem bei Shopware()->Db()->query($sql) liegt in den Klammern, welche für mich einen Methodenaufruf darstellen und dass keine Bindung vorliegt. Wenn es heißen würde $Shopware->Db->query($sql) wäre es für mich verständlich Sorry wenn ich mit so trivialen Fragen nerve aber ich bin wirklich ganz neu in die Materie eingestiegen und irgendwie stehe ich hier auf dem Schlauch und komme nicht voran :frowning:

Hallo phpneuling, sowohl „Shopware()“ als auch „Db()“ sind Funktionen/Methoden, die jeweils ein entsprechendes Objekt zurück liefern. Die Funktion Shopware() findest du in der Datei deinShopVerzeichnis/engine/Shopware/Application.php. Sie gibt eine Instanz des Shopware-Objektes zurück, welches du in der selben Datei findest. Dort kannst du anschließend auch sehen, dass das Shopware-Objekt über eine „Db“-Methode verfügt, die wiederum eine Instanz von Enlight_Components_Db_Adapter_Pdo_Mysql zurück gibt. Hilft dir dies ein wenig zu verstehen, was hier geschieht? :slight_smile: Gruß, Patrick :shopware:

1 „Gefällt mir“

Oh super, jetzt hab ich es verstanden. Wenn ich Deklaration der Klasse vor mir habe ist es für mich viel einfacher. In der Klassendokumentation finde ich mich noch nicht so richtig zurecht. Eine kleine Unklarheit hätte ich aber noch. Da Shopware() eine Methode der Klasse Shopware ist und mir ein Objekt der Klasse liefert, wieso kann ich einfach mit Shopware() darauf zugreifen? Im Kurs wird ja bei der Erweiterung der Klasse Shopware_Components_Plugin_Bootstrap einfach mit Shopware()-> auf die Methode zugegriffen. Was ich bis jetzt in PHP gelernt habe wäre, dass zur Anwendung einer Methode eine Klasse instanziert sein muss sprich der Aufruf so sein müsste: $Instanz-> Shopware(); bzw. wenn die Methode statisch deklariert wurde der Zugriff so erfolgen kann: Shopware::Shopware(); Nochmals vielen Dank an Alle, die mir geholfen haben. Finde ich echt großartig, dass man sich die Zeit nimmt einem Einsteiger weiterzuhelfen. Gruß phpneuling

[quote=“phpneuling”]Da Shopware() eine Methode der Klasse Shopware ist[/quote] Nein, ist es nicht. Schau dir noch einmal die Antwort von Patrick an: [quote]Die Funktion Shopware() findest du in der Datei deinShopVerzeichnis/engine/Shopware/Application.php.[/quote] Viele Grüße

1 „Gefällt mir“

Ja da hast du recht. Auf einmal ist mir alles klar und ich verstehe auch den Aufbau der Klassendokumentation. Da stand ich voll auf der Leitung.