Tobias Unger: unlogisches Verhalten von PHP?

Hallo,

ich habe folgendes Experiment gemacht:

<?php
if ("1" != "1") {
?>
Hello
<?php
}
?>

Merkwürdigerweise wird da kein Hello ausgegeben. Ich hätte erwartet, dass PHP nur innerhalb von <?php ?> aktiv ist und sich nicht um alles ausenrum kümmert.
Das ist so zwar sehr praktisch, aber ich bin mir nicht so sicher, ob ich das nutzen soll, oder das bei der nächsten PHP-Version nicht mehr funktioniert.

Was meint ihr?

Vielen Dank im Vorraus,
Tobias Unger, www.tobias-unger.de

  1. <?php
    if ("1" != "1") {
    ?>
    Hello
    <?php
    }
    ?>

    Das ist so zwar sehr praktisch,

    Das hat sich der PHP-Entwickler auch so gedacht. Siehe z.B. da:

    http://de3.php.net/manual/de/control-structures.alternative-syntax.php

    aber ich bin mir nicht so sicher, ob ich das nutzen soll, oder das bei der nächsten PHP-Version nicht mehr funktioniert.

    Wird schon gehen :-)

    1. Hallo,
      naja, aber warum arbeitet PHP denn auch ausserhalb von <?php ?>.
      Kann sich das jemand erklären??? Ich finde es einfach nicht logisch, auch wenn es nützlich ist.

      Tobias Unger

      1. naja, aber warum arbeitet PHP denn auch ausserhalb von <?php ?>.
        Kann sich das jemand erklären??? Ich finde es einfach nicht logisch, auch wenn es nützlich ist.

        Grundaufgabe von PHP ist es, Webseiten einfach zu manipulieren, und dazu zählt auch ganze HTML-Blöcke bedingt anzeigen zu können.

      2. Hi Tobias,

        naja, aber warum arbeitet PHP denn auch ausserhalb von <?php ?>.
        Kann sich das jemand erklären??? Ich finde es einfach nicht logisch, auch wenn es nützlich ist.

        Weil PHP das ganze _Dokument_ abarbeitet und nicht die PHP Befehle blockweise. Wenn es blockweise abgearbeitet würde, hättest du womöglich Variablen aus dem ersetn Block nicht mehr im zweiten ;-)

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
        That's life - Es gibt im Leben[tm] keine Zurück-Taste. (Fabian Transchel)
      3. Moin!

        naja, aber warum arbeitet PHP denn auch ausserhalb von <?php ?>.

        PHP arbeite auf der gesamten Seite.

        Solange kein "<?php" gekommen ist, bedeutet das für PHP: Gib den folgenden Text aus. Genauer: Es wird der Befehl "echo 'Der Text, der da im Code steht';" ausgeführt.

        Kann sich das jemand erklären??? Ich finde es einfach nicht logisch, auch wenn es nützlich ist.

        Wenn du bedenkst, dass sämtlicher Text, der außerhalb der PHP-Tags steht, als "echo 'Text';" aufgefaßt wird, wirst du einsehen, dass alles ganz logisch ist.

        - Sven Rautenberg

        1. Hello,

          Wenn du bedenkst, dass sämtlicher Text, der außerhalb der PHP-Tags steht, als "echo 'Text';" aufgefaßt wird, wirst du einsehen, dass alles ganz logisch ist.

          Logik ist so eine Sache, wenn man die Freiheitsgrade und Rahmenbedingungen nicht kennt...

          Das entscheidende Element ist ja wohl die öffnene Blockklammerung innerhalb eines Parser-Bereiches.

          <?php         bedeutet, fange hier an, den folgenden Code zu interpretiern

          {           bedeutet, hier fängt ein neuer Block an, eine Unterebene zum letzten Block

          ?>        bedeutet innerhalb der Blockklammerung, dass der folgende Code nicht mehr
                        interpretiert wird

          <?php     fange hier wieder an zu interpretieren

          }           gehe in die darüberliegende Programmebene zurück

          ?>            höre wieder auf zu interpretieren

          Da ein Script im Interpretationslauf immer Top-Down abgearbeitet wird, beginnend vom beim "Einsammellauf" ermittelten "Program Entry Point", kommen bestimmte Passagen eben gar nicht in den Focus des Interpreters, wenn die entsprechende Bedingung nicht erfüllt ist.

          Trotzdem halte ich die Verwendung dieser Möglichkeiten (bedingtes HTML) für unprofessionell.
          Selbst bei der Heredoc-Syntax, die etwas ähnliches bewirkt, geht die Übersicht oft noch verloren und außerdem funktioniert sie auch nur unter Berücksichtigung der zum OS passenden Zeilenende-Sequenz fehlerfrei.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
  2. hi,

    <?php
    if ("1" != "1") {
    ?>
    Hello
    <?php
    }
    ?>

    Merkwürdigerweise wird da kein Hello ausgegeben.

    nein, das ist nicht merkwürdig, sondern so gedacht.

    Ich hätte erwartet, dass PHP nur innerhalb von <?php ?> aktiv ist und sich nicht um alles ausenrum kümmert.

    falsch gewartet :-)

    Das ist so zwar sehr praktisch, aber ich bin mir nicht so sicher, ob ich das nutzen soll, oder das bei der nächsten PHP-Version nicht mehr funktioniert.

    Was meint ihr?

    http://www.php.net/manual/de/control-structures.alternative-syntax.php. dort explizit auf die alternative syntax bezogen, aber natürlich auf für die "normale" gültig.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  3. Hallo Tobias,

    <?php
    if ("1" != "1") {
    ?>
    Hello
    <?php
    }
    ?>

    Merkwürdigerweise wird da kein Hello ausgegeben.

    So funktioniert PHP. Es ist ein Feature und kein Bug.

    Ich hätte erwartet, dass PHP nur innerhalb von <?php ?> aktiv ist und sich nicht um alles ausenrum kümmert.
    Das ist so zwar sehr praktisch, aber ich bin mir nicht so sicher, ob ich das nutzen soll, oder das bei der nächsten PHP-Version nicht mehr funktioniert.

    Lies doch bitte http://de.php.net/manual/de/tutorial.useful.php, Abschnitt 2.5.

    Tobias Unger, www.tobias-unger.de

    Schau doch mal, es gibt ein Extra-Feld für URLs.
    Mit [ link:http://www.tobias-unger.de ]  erzeugst Du den anklickbaren Link http://www.tobias-unger.de. Die Leerzeichen hinter der öffnenden und vor der schließenden eckigen Klammer musst Du allerdings weglassen.

    Freundliche Grüsse,

    Vinzenz

    1. Hello Tobias,

      es ist zwar kein Bug, sondern gewollt, wie Vinzenz es auch schon schrieb.

      Trotzdem solltest Du das nicht einsetzen, wenn Dir die Les- und Pflegbarkeit Deiner Scripte ließ ist. Bei kleineren Textsequenzen kann man ohne weiteres auch Anführungszeichen setzen und Echo benutzen und bei größeren Texten empfiehlt es sich dann sowieso, diese aus einer externen Datei einzulesen.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau