Der Martin: Klassen constante vom Kind benutzen um eigene Constante zu definieren

Beitrag lesen

Hallo,

nur zur Klarstellung: Ich habe vermutlich nicht wirklich verstanden, was du erreichen willst. Ich habe aber den Eindruck, dass dein Ansatz mehrere Denkfehler hat. Mindestens zwei.

Wenn du eine Variable oder Konstante für die Klasse definierst (also mit der Doppeldoppelpunkt-Notation), dann existiert sie genau einmal für alle Instanzen der Klasse. Das widerspricht deiner Beschreibung, nach der die Children (nicht Childs) jedes ihren eigenen Tabellennamen haben sollen. Du möchtest quasi mehrere Kinder haben, aber sie sollen sich alle einen gemeinsamen Personalausweis teilen.

Der zweite Knackpunkt ist ein Henne-Ei-Problem. Du kannst bei der Definition der Basisklasse nicht auf Eigenschaften von abgeleiteten Klassen oder gar deren Instanzen zugreifen, weil die zu dem Zeitpunkt noch gar nicht existieren bzw. bekannt sind. Oder haben deine Eltern dir bei der Geburt den Vornamen gegeben, den du später auch deinem Erstgeborenen geben würdest?

Am Ende möchte ich mit $objChild::ID auf die Tabellenfelder zugreifen. Und NUR SO. Ein $objChild->ID oder ein $objChild::$ID ist nicht möglich (um große Erklärungen zu ersparen, dass ist einfach so).

Wenn du prinzipbedingte Einschränkungen hast, kann es nützlich sein, diese zu erklären. Dann kann man nämlich beim Entwickeln einer möglichen Lösung darauf achten.

Obiges Beispiel bringt den Fehler "Exception: Undefined class constant 'self::TABLENAME'".

Natürlich. In der Klasse ist ja keine Konstante TABLENAME definiert.

Mache ich ein sonst TABLENAME = self::TABLENAME; dazu, dann bekomme ich den Fehler: "Exception: Cannot declare self-referencing constant 'self::TABLENAME'".

Auch klar. Du willst bei der Deklaration der Konstanten bereits auf ihren Wert zugreifen. Das geht nicht. Du kannst nicht beim Schreiben eines Briefes schon das Zustelldatum im Text nennen. Das ergibt sich erst später.

Natürlich kann ich jedes neue Feld in alle ableitende Klassen reinpacken.

Geht's um neue Felder (Eigenschaften) in den Kind-Instanzen? So wie ich dich verstanden habe, sollte die Kindklasse eine bestimmte Eigenschaft haben, die beim Erzeugen der Instanz mit einem Wert belegt wird.

Aber wie gesagt: Ich werde aus deiner Beschreibung noch nicht schlau - es ist daher fraglich, ob ich dir überhaupt weiterhelfen kann.

May the Schwartz be with you
 Martin

--
Theorie ist, wenn eigentlich jeder weiß, wie's gehen müsste, und es geht doch nicht.
Praxis ist, wenn's geht, obwohl es keiner so richtig versteht.
Bei uns sind Theorie und Praxis vereint: Nichts geht, und keiner weiß, warum.