Encoder: Variablen in String ersetzen

Schönen Sonntag zusammen!
Ich habe ein langes Script vor mir mit so einem Aufbau

<?php
if (...)
?>
Hier steht dann viel Text mit $variablen deren $Wert in den String eingesetzt wird.
<?php
else if (...)
?>
Hier kommt der $Text mit Variablen für den else if Zweig.
und so weiter...
<?php
weiterer PHP Code
?>

Die Textblöcke sind ziemlich lang, es kommt HTML drin vor und einige Variablen, die zur Ausgabe in gewohnter Weise ersetzt werden.
Das will ich jetzt so umbauen dass der ganze Text in separaten Dateien steht.
<?php
if (...)
  include("fileA");
else if (...)
  include("fileB");
?>

In den includeten Dateien werden die Variablen nicht mehr ersetzt.
Meine Lösung war, in diesen Dateien ein print<<<END einzubauen.
Der Inhalt ist damit allerdings im Texteditor nicht mehr schön als HTML erkennbar sondern wird als einfarbiger String erkannt.

Und jetzt endlich meine Frage. Würde das auch anders gehen? Vielleicht gibt es einen Befehl der einen String auf sowas untersucht und alle Variablen ersetzt?
str_replace will ich NICHT nutzen, da ich die Variablennamen nicht alle einzeln aufzählen will.

  1. Tach!

    In den includeten Dateien werden die Variablen nicht mehr ersetzt.
    Meine Lösung war, in diesen Dateien ein print<<<END einzubauen.

    Nebst <?php vorher, sonst ist es ja nur Text, aus der Sicht PHPs.

    Der Inhalt ist damit allerdings im Texteditor nicht mehr schön als HTML erkennbar sondern wird als einfarbiger String erkannt.

    Manche lassen sich austricksen, indem man in einem Kommentar den PHP-Tag wieder schließt <?php //>. Wenn der Editor aber zu intelligent ist, geht das so nicht.

    Und jetzt endlich meine Frage. Würde das auch anders gehen? Vielleicht gibt es einen Befehl der einen String auf sowas untersucht und alle Variablen ersetzt?

    Ja, eval() - mit allen Konsequenzen. Zum Beispiel, dass du noch was vorn und hinten anfügen musst, damit eval() den Code korrekt interpretieren kann. Und dass du nur vertrauenswürdige Daten verwenden solltest.

    dedlfix.

    1. Hallo

      Zunächst mal, mein Beispiel stimmt so gar nicht. Das sind auch schon Fragmente mit <<<END, ich hatte die entfernt damit ich die Struktur davon besser im Editor sehe. Man sollte am Sonntag einfach auch mal die Kiste aus lassen :-)

      An eval dachte ich auch schon, war mir dann aber zu kompliziert. Vor allem nachdem mir eingefallen ist dass der Text vorher auch schon nicht "einfach so" in der großen Datei steht.
      Meine Idee war jetzt nur, ob es eine Funktion in PHP gibt die einen String mit $Variablen entgegen nimmt und in dem alles ersetzt was im aktuellen Kontext verfügbar ist.

      1. Tach!

        Meine Idee war jetzt nur, ob es eine Funktion in PHP gibt die einen String mit $Variablen entgegen nimmt und in dem alles ersetzt was im aktuellen Kontext verfügbar ist.

        Mir ist außer eval() nichts bekannt. Und genau das willst du, ein Stück Text als Code evaluieren. Dass darin nur Strings vorkommen, ist dabei nebensächlich. Ansonsten gibt es noch Template-Engines, die Platzhalter auswerten. Für solche gibt es sicherlich auch Tutorials, von denen man sich inspirieren lassen kann.

        dedlfix.

  2. Moin,

    Ich habe ein langes Script vor mir mit so einem Aufbau

    <?php
    if (...)
    ?>
    Hier steht dann viel Text mit $variablen deren $Wert in den String eingesetzt wird.
    <?php
    else if (...)
    ?>
    Hier kommt der $Text mit Variablen für den else if Zweig.
    und so weiter...
    <?php
    weiterer PHP Code
    ?>

    Idee: Beschränke Kontrollstrukturen in den Templates auf eine Minimun, d.h., es wird z.B. nur noch kontrolliert, ob z.B. eine Liste o.a. Variablen vorhanden sind, nur der Ausgabe wegen. Alles was Programmlogik ist, lege in eine Kontrollerklasse und lade bei Bedarf ein anderes Template, so verhinderst Du redundanken Code und die Organisation wird überschaubarer. Schau Dir extract() an, das hilft Dir, die Variablen fürs Template in die Symboltabelle zu schießen.

    HERE-Docs sind unschön. Erträglich werden die, wenn sie am Ende einer PHP-Datei notiert sind, z.B. als return-Value.

    Hotti