OOP: Reihenfolge der Initialisierung wichtig ??

Hatachy

Erfahrenes Mitglied
HI !

Hab seit nun fast ner Woche ein blödes Problem. Dank Design und Modul System zusammen mit OOP funzt alles irgendwie net so richtig.
Der anchfolgende Code scheint etwas sinnlos, aber das ist der Grundaufbau meines Systems. Klappte bisher auch ganz gut, bis ich dann Variablen in den Modulen mit Werten belegt hatte, denn diese wurden nicht durch die Templatefunktion ausgegeben. Langsam weiß ich net was dadran falsch sein könnte, find einfach nix. Kann mir das nur so erklären, dass PHP damit Probleme hat, dass die Klassen Variablen aus der jeweiligen anderen verwenden, also die eine Klasse variablen aus einer Klasse, die "noch" garnet existiert sondern erst später initialisiert wird. Abetr wie ich das umgehen könnte wäre dann die nächste Frage. Naja, vielleicht findet ja jemand was :rolleyes:

PHP:
<?php
class Template {
    function templatemain() {
        global $Seite, $TestText;
        echo $TestText;
        echo $Seite->text;
    }
}

class Inhalt {
    var $text;
    function Inhalt () {
        global $Tpl;
        $this->text = "<br />Ich bin der weitere Inhalt und müsste zweimal hier stehen";
        $Tpl->templatemain();
    }
}

$TestText = "Ich bin der erste Inhalt";
$Tpl   = new Template;
$Seite = new Inhalt;


echo "<br />>>".$Seite->text."<<";
?>

Dank' schön schonmal ;)
 
Hm... ich versteh nicht ganz wo bei dem Code das Problem ist (bis auf die Vergewaltigung einiger OOP-Prinzipien :-)). Die Ausgabe sollte folgendermaßen aussehen:
Code:
Ich bin der erste Inhalt<br />>><br />Ich bin der weitere Inhalt und müsste zweimal hier stehen<<
Und das tut sie wohl auch. Wie sollte sie deiner Meinung nach aussehen?

Ansonsten würde ich dir raten, nicht mit solchen globalen Objektinstanzen in Objektfunktionen zu arbeiten. Du siehst ja selbst, wie verwirrend das ganze sonst werden kann. Ich hab jetzt leider zu wenig Informationen darüber, was du dir unter einem "Modul" vorstellst und wie dieses Programmtechnisch bei dir umgesetzt ist. Sonst könnte ich dir vielleicht einen Wink in die richtige Richtung geben.
 
ne so sollte die garantiert net da stehn ;)
deswegen steht da ja auch "ich sollte hier ZWEIMAL stehen". einmal sollte die Template Funktion das ausgeben und einmal einfach der "normale" code.

Richtig müsste es heißen:
Ich bin der erste Inhalt
<br />Ich bin der weitere Inhalt und müsste zweimal hier stehen
<br />>><br />Ich bin der weitere Inhalt und müsste zweimal hier stehen<<


Die zweite Ausgabe ist ja nur zum test, dass die Variable der Klasse funktioniert. So und wenn ich irgendwelche Prinzipien vergawaltige, dann bitte welche ?
 
Original geschrieben von Hatachy

Die zweite Ausgabe ist ja nur zum test, dass die Variable der Klasse funktioniert. So und wenn ich irgendwelche Prinzipien vergawaltige, dann bitte welche ?

Zum Beispiel die der Kapselung. Du arbeitest mit globalen Variablen innerhalb der Klasse.
Es ist schon schlimm genaug das PHP sowas zulässt (igitt) aber noch schlimmer dieses aufzugreifen.

2. Punkt:
Du deklarierst die Variable Seite innerhalb von Template. Hat ein Template eine Seite? Nein dementsprechend kein schöner weg.
Versuche beim OOP Design nach den Worten:
"X hat ein(e), X ist ein(e)"
zu verfahren. Schau ob es wirklich sinn macht.
Das Template eine Referenz auf Page bekommt macht absolut kein Sinn.
Zudem ist auch hier wieder mit globaln Variablen gearbeitet worden.

3.Punkt:
Du gibst in der Methode Template Main per echo aus. Das ist eine schlechte entscheidung.
Mache deine Ausgaben an einem Platz, und gebe lieber den Rückgabewert von Templatemain aus.
Du musst die Trennung von Ansicht und Daten beachten.
 
also zu den globalen variablen:
wie soll ichs denn sonst amchen ? hab ne templatefunktion, in die nachher (per <EOF >> und { } ) die Variablen aus der Modul Klasse eingebettet werden. zu punkt 3) das erklärt sich wohl mit dem darübver, dieses hier war nur etwas PHP-Müll, den ich egschrieben habe um mein Problem zu verdeutlichen. Außer dem Aufbau mit den mehreren Klassen und der Einbettung der einen in jeweils die andere ist alles nur zum darstellen meines Problems, da es wohl nix bringt meine zig-zeilen hier zu posten ;)

Also irgendwie seh ich in deinem Post auch noch nicht die Lösung, wie könnte ich das denn umgehen mit den globalen Variablen. ich kann ja nicht in die Template Klasse alles übergeben :rolleyes:
 
Zurück