Hallo!
Der Code war ein Beispiel. Bei so einem Beispiel ginge das natürlich einfacher.
Von jemandem, der selbst schreibt, der mache gerade seine ersten Gehversuche mit OOP, muß man nicht erwarten, dass seine Codebeispiele nicht der eigentliche Code sind, sondern abstrahierte Beispiele.
Ich schrieb, meine ersten Gehversuche in OOP UNTER PHP.
So soll es aber nicht sein. In Beispielen versuche ich, soweit wie möglich zu abstrahieren, und mache eine Vorgabe, wie es sein soll. Scheinbar verlieren manche Leute dadurch die Vorstellung, um was es geht.
Das Problem ist: Abstrakte Problemstellungen lösen sich sehr gerne von der Realität und lassen sich nur noch schwer wieder mit ihr verbinden. Konkrete, reale Probleme eröffnen oft viel bessere Betrachtungsweisen.
Bisher ging ich davon aus, je weiter ich abstrahiere und unnütze Nebensächlichkeiten entferne, desto einfacher ist es nachzuvollziehen. Ich sehe aber, die Abstraktion wird jenseits einer Grenze selbst wieder erklärungsbedürftig.
Was du machst ist folgendes: Du fügst eine Datei ein, in der allgemeine Funktionen definiert sind. Diese sind nun zwar innerhalb der Klasse nutzbar, aber nicht als Methode sonder als Funktion innerhalb einer Methode.
Wirklich? Oder sind sie global eingebunden?
Versuch einfach mal, mit deinem abstrakten Beispielcode zwei männliche Objekte anzulegen. Das dürfte voraussichtlich scheitern, weil du eine Funktion doppelt definieren willst.
Das ist schon klar. Aber das passiert auch, wenn sie global eingebunden wird. In der neuen Factory-Klasse ist das kein Problem mehr, weil nun Klassen statt alleinstehender Funktionen eingebunden werden.
test_m(); funktionierte ja aus dem globalen Kontext. Kann man eine in eine Funktion eingebundene Funktion
function erste_ebene()
{
function test_m()
{}
}
ebenfalls aus dem globalen Kontext mit test_m() aufrufen?
Die Lösung ist meinem anderen Beitrag.
Ja klar. Das Factory Pattern ist die übliche Lösung, wenn man über ein einziges Interface gleichartige, aber dennoch intern unterschiedliche Objekte herstellen will.
Ja, ich wollte im Prinzip ja auch nur den Weg wissen, wie ich wirklich nur die benötigten Inhalte inkludieren kann. Ich hatte zunächst den Denkfehler, die Unterklassen müßten in PHP schon im Hauptspeicher vorhanden sein, um aus ihnen das konkrete Objekt zu erzeugen. Deshalb versuchte ich den Weg, keine Unterklassen einzubinden, sondern mit einer Klasse auszukommen und in diese dynamisch die nötigen Methoden einzubinden. Aber es ist nicht nötig, ein include der wirklich benötigten Unterklasse funktioniert, wie ich es will.