im Template bin ich heute morgen auf folgendes gestoßen:
[{$category->oxcategories__oxtitle->value }]
[I]$category[/I] ist ein Objekt vom Typ [I]oxCategory[/I], [I]oxcategories__oxtitle[/I] ist ein [I]oxField[/I] Objekt. So weit, so gut.
In der Dokumentation gibt es in der Klasse aber kein Feld, dass [I]oxcategories__oxtitle[/I] heißt. Noch in einer der Elternklassen. Wo zum Teufel kommen da die Daten her? Ich habe wirklich gesucht und vorher noch einen anderen Programmierer bei uns gefragt, der aber auch nur mit den Schultern zucken konnte.
Da das Azure Theme komplett undokumentiert ist, bin ich dazu übergegangen einfach in den SourceCode zu schauen, wo die Daten herkommen bzw. was mir alles an Methoden zur Verfügung steht, was bisher deutlich besser geklappt hat, als zu versuchen, die Themelogik zu verstehen. Dieser Umstand hier stellt mich allerdings vor ein Rätzel.
Aus der Datenbank, das ist klar. Mir geht es aber darum, wie die dann in das oxField-Objekt und dieses dann in das - nicht existierende - Feld [I]oxcategories__oxtitle[/I] von [I]oxCategory[/I] reinkommen
seufz Es ist doch in Ordnung, wenn du meine Frage nicht beantworten willst, aber Sprüche wie “Grundlagen OOP kannst du dir wunderbar selbst erarbeiten” müssen doch echt nicht sein, oder?
Ich arbeite seit etwas über ein Jahr mit OOP. Mein Arbeitskollege hat Informatik studiert und arbeitet seit dem auch seit über 5 Jahren mit OOP in verschiedensten Sprachen. Da auch er sich in diesem Fall nicht erklären konnte, wieso da eine Eigenschaft Daten enthält, obwohl sie nicht definiert ist, würde ich das mal nicht unter “Grundlagen OOP” abstempeln.
Als ich das letzte mal nachgesehen habe, greift man (in PHP) mit [I]$objekt->eigenschaft[/I] auf Eigenschaften und mit [I]$objekt->methode()[/I] auf Methoden zu. In diesem Fall gibt es die Eigenschaft im Quellcode aber nicht (auch nicht in Elternklassen), was wir uns nicht erklären können.
Kann ja sein, dass es da etwas spezielles von PHP gibt, dass wir beide nicht kennen oder dass wir da etwas übersehen haben. Das ist der aber eben genau der Grund, warum ich nachfrage und auch der Grund, warum deine Aussage nicht einmal ansatzweise hilfreich ist und äußerst arrogant klingt.
Es ist ganz einfach so dass in PHP alle Klassen dynamisch sind - das heißt Felder können einfach hinzugefügt werden. Diese ganze Magie passiert in core/oxbase.php - alle Objekte aus der DB leiten von dieser Klasse ab. Und die sorgt dafür dass alle Datenbankfelder automatisch runter gemappt werden auf Felder nach der Struktur tabellenname__feldname das sind dann alles oxFields siehe core/oxfield.php
Das ist eine Information mit der ich weitermachen kann. Mir war nicht bewusst, dass man nach Lust und Laune neue Felder zur Laufzeit erstellen kann (ich habe sowas noch nie gebraucht oder gesehen). Kurzes googeln mit deiner Info hat mich dann auf die __get() Methode gebracht, in der soweit ich das beim Überfliegen sehen konnte genau das passiert.