Rolf B: Wo befindet sich meine php-Anwendung gerade

Beitrag lesen

Hallo Diddi,

Es gibt viele Ansätze zur Lösung, aber ICH würde Programmlogik niemals an den Ort der Installation koppeln. Das ist eine extrem zerbrechliche Konstruktion.

Wenn die Anwendung in dir1 vom include ein bestimmtes Verhalten verlangt und die Anwendung in dir2 ein anderes, dann ist es wichtig, dass das in diesen beiden Anwendungen explizit gemacht wird. Auf welche Weise auch immer. Code, der auf magische Weise „das richtige“ tut, wird dein älteres Ich zum Kotzen bringen. Im Strahl.

Die primitivste Form ist eine globale Variable. Deren Name sollte zum Namen der inkludierten Datei einen Bezug haben. Setze sie in dir1 vor dem include auf 1 und in dir2 auf 2. Füge an beiden Stellen einen Kommentar hinzu, was das soll. Frage im include die Variable geeignet ab. Dokumentiere diese Variable, beschreibe die erlaubten Werte und beschreibe die Verhaltensunterschiede. Entweder zu Beginn der Include-Datei oder in der Moduldoku zum Include. Aber dokumentiere es.

Ich will das nicht als beste Lösung empfehlen. Es ist primitiv, und je nach Inhalt des include vielleicht die einzige vernünftige Möglichkeit.

Empfehlen möchte ich dies hier: Laut PSR-1 soll eine PHP Datei entweder etwas tun ("cause side effects") oder etwas deklarieren (Konstanten, Funktionen, Klassen, …). Mischformen sind untersagt. Wenn du also grundlegende Code-Standards einhalten willst, dann darf deine include-Datei nur Klassen oder Funktionen definieren und nicht eigenständig Code ausführen. Die Ausführung muss durch einen Funktions- oder Methodenaufruf im inkludierenden Script angestoßen werden.

Und hier wird es spannend: an dieser Stelle kannst du per Parameter steuern, was passieren soll. Oder du gliederst den Inhalt des Include sinnvoll in Funktionen und rufst sie in dir1 und dir2 unterschiedlich kombiniert auf. Wie man das in deinem Fall am besten macht, kann man ohne genauere Codekenntnis nicht sagen. Aber das ist der Weg zu wartbarem und verstehbarem Code.

Rolf

--
sumpsi - posui - obstruxi