unlogisches Verhalten von PHP?
Tobias Unger
- php
0 dedlfix-1 Tobias Unger0 dedlfix0 Dennis0 Sven Rautenberg0 Tom
0 wahsaga1 Vinzenz0 Tom
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
<?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 :-)
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
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.
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.
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
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
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
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
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