|
|
Kapitel 6. Grundlagen der SyntaxDen HTML-Bereich der Datei verlassen
W�hrend des Parsens einer Datei geht PHP den Text solange einfach
durch, bis einer der speziellen Tags gefunden wird, der PHP mitteilt,
dass ab nun mit der Interpretation des Textes als PHP Code zu beginnen
ist. Der Parser f�hrt nun den Code solange aus, bis er auf einen
schlie�enden PHP Tag st��t, welcher dem Parser mitteilt, den Text ab
hier wieder nur einfach durchzugehen. Das ist der Mechanismus der es
erlaubt, PHP Code in HTML einzubinden: alles au�erhalb der PHP Tags
wird einfach alleine gelassen, w�hrend alles innerhalb dieser Tags
als Code geparsed wird.
Es gibt vier Arten von Tags, welche die B�cke mit PHP Code kennzeichnen.
Davon sind nur zwei immer verf�gbar (<?php. . .?> and <script
language="php">. . .</script>), die anderen k�nnen in der
Konfigurationsdatei php.ini aktiviert bzw. deaktiviert werden. Die
Tags in der Kurzform bzw. im ASP-Stil m�gen zwar praktisch erscheinen,
sind jedoch nicht so portabel wie die l�ngeren Versionen. Wenn Sie
weiters beabsichtigen, PHP Code in XML oder XHTML einzubinden, werden
Sie die XML-konformen <?php. . .?> verwenden m�ssen.
Die von PHP unterst�tzten Tags sind:
Beispiel 6-1. M�glichkeiten, den HTML-Bereich zu verlassen 1. <?php echo("In XHTML- oder XML-konformen Dokumenten benutzen Sie diese Syntax\n"); ?>
2. <? echo ("Die einfachste M�glichkeit: eine SGML-�processing instruction�\n"); ?>
<?= expression ?> Dies ist eine Abk�rzung f�r "<? echo expression ?>"
3. <script language="php">
echo ("manche Editoren(wie FrontPage) m�gen
keine �processing instructions�");
</script>
4. <% echo ("Optional k�nnen Sie auch Tags im ASP-Stil verwenden"); %>
<%= $variable; # Das ist ein Abk�rzung fuer "<% echo . . ." %> |
|
Die erste Methode (<?php. . .?>) wird bevorzugt, da sie auch
die Verwendung von PHP in XML-konformen Code, wie XHTML, erlaubt.
Die zweite Methode ist nicht immer verf�gbar. Die Kurzform der Tags
ist nur m�glich, wenn diese zuvor aktiviert wurde. Dies kann mittels
der Funktion short_tags() (nur PHP 3), dem Setzen
der Konfigurationsoption short_open_tag in der PHP
Konfigurationsdatei, oder durch das Kompilieren von PHP mit der
Option --enable-short-tags. Auch wenn dise Methode standardm��ig
in der php.ini.dist aktiviert ist, wird die Verwendung dieser
Kurzform nicht empfohlen.
Die vierte Methode ist nur verf�gbar, wenn die Konfigurationsoption
asp_tags aktiviert ist.
Anmerkung: Die Unterst�tzung der Tags im ASP-Stil wurde in Version 3.0.4.
hinzugef�gt.
Anmerkung:
Die Verwendung der �short tags� sollten Sie vermeiden, wenn Sie
Applikationen oder Bibliotheken entwickeln, die verteilt oder auf
PHP-Servern eingesetzt werden soll, die nicht unter Ihrer Kontrolle
stehen, da die �short tags� auf dem einzusetzenden Server nicht
unterst�tzt werden k�nnten. Stellen Sie also sicher, dass f�r
portablen, weiterverteilbaren Code keine �short tags� verwendet
werden.
Der schlie�ende Tag f�r den PHP-Block schlie�t eine sofort
folgende Zeilenschaltung mit ein, falls diese vorhanden
ist. Au�erdem beinhaltet der schlie�ende Tag ein implizites Semikolon;
Sie m�ssen also die letzte Zeile eines PHP-Blocks nicht mit einem
Semikolon beenden.
PHP erm�glicht auch die Verwendung folgender Strukturen:
Beispiel 6-2. Erweitertes Verlassen <?php
if ($expression) {
?>
<strong>Das ist richtig.</strong>
<?php
} else {
?>
<strong>Das ist falsch.</strong>
<?php
}
?> |
|
Dies funktioniert wie erwartet, da PHP nach dem Auffinden eines ?>
schlie�enden Tags einfach alles ausgibt, bis es wieder auf einen
�ffnenden Tag st��t. Das obige Beispiel ist nat�rlich gek�nstelt,
aber f�r die Ausgabe von gro�en Textbl�cken ist der Ausstieg aus
dem Parse-Modus generell effizienter, als den gesamten Text durch
echo(), print(), etc. zu
jagen.
User Contributed Notes Grundlagen der Syntax |
|
11-Oct-2001 07:34 |
|
I use FrontPage 2000 exclusively for creating my PHP documents. I use the
<% %> style syntax. I can put code anywhere, before head (as is
required for cookie data) and anywhere else in between. Using advanced
flow control, i can design an entire page in html, and then put PHP
control statements around it. This is much easier than <% echo %>
commands. You can drop in/out of PHP at ANY time, and the only reason to
ever use <% echo %> is for variables. Save yourself some hassle and
write your html in html and avoid the echo mess.
|
|
mrtidy at mail dot com
12-Dec-2001 07:36 |
|
[Ed Note:
This is because of short_tags, <?xml turns php parsing on,
because of the <?.
[email protected]]
I am moving my site
to XHTML and I ran into trouble with the <?xml ?> interfering with
the <?php ?> method of escaping for HTML. A quick check of the
mailing list confirmed that the current preferred method to cleanly output
the <?xml ?> line is to echo it:
<?php
echo("<?xml version=\"1.0\"
encoding=\"UTF-8\"?>\n"); ?>
|
|
paquerette_only at hotmail dot com
16-Jan-2002 08:40 |
|
Under php 3.0.14 : if you have a line like this : echo "?>
written to file"; And you wish to comment this line, you'll do
this : //echo "?> written to file"; But this will
generate a parse error at the end of script (even if this line was in an
include script).
Why? because '?>' is ignored as long as it is
inside "". But once you've commented, the echo function is
ignored, and '?>' takes its signification : end of script!
I
guess it was corrected on next version, but if you run under php 3.0.14 be
careful, it make me loose a lot of time!
Paquerette
|
|
dave at [nospam] dot netready dot biz
18-Mar-2002 11:21 |
|
A little "feature" of PHP I've discovered is that the <?PHP
token requires a space after it whereas after the <? and <% tokens a
space is optional.
The error message you get if you miss the space
is not too helpful so be warned!
(These examples only give a
warning with error_reporting(E_ALL) )
<?PHP/*<Some
HTML>*/?> fails... <?/*<Some HTML>*/?> works...
|
|
stodden at in dot tum dot de
18-Jun-2002 09:51 |
|
if you're experiencing problems with php PIs when generating creating
mixed php/html content with e.g. an XSLT processor in html output
mode: it's not the processors fault. an _SGML_ processing
instruction is actually written as <?php ..>, i.e. without a
trailing question mark.
<xsl:processing-instruction
name="php"> echo
$hello; </xsl:processing-instruction> will therefor not not
work like it should.
a sane solution to work around this is
generating <script> tags instead.
|
|
php at 3wheel dot net
22-Nov-2002 07:29 |
|
"The closing tag for the block will include the immediately trailing
newline if one is present."
This is extremely annoying, and
there should be some way of disabling this behavior. If you're generating
HTML it's not really a problem, but I'm using PHP to generate text emails
using templates- and not getting out what I put in is pretty annoying.
|
|
carl (at) thep.lu.se
07-Dec-2002 08:13 |
|
If you have code that uses the short open tags "<?" and
"<?=", and you want to be able to turn off
short_open_tags, you will need to change those tags to
"<?php" and "<?php echo". For a small
program this is trivial to do manually, but if you have thousands of
lines of code, it makes sense to do this in a more automated way. A
simple search and replace will only work if you don't have the string
<? in any strings or comments. Quite likely you don't, but to solve
this not-quite-a-problem, I've written a program that does the job and
does it right. I challenge you all to come up with a PHP program that
changes its behavior after being passed through this tag expander.
(Programs that examine their own source don't count!) The thing can
be found in the CVS repository for BASE at sourceforge: (you need to
reassemble the URL - I had to cut it to be able to post it)
basedb/contrib/ConvertShortTags/
|
|
de \ kibo \ niels
19-Dec-2002 01:19 |
|
A follow-up to the first posting on this page: If you're writing PHP code
on a non-UNIX system like MacOS (and even on a UNIX system like Mac OS
X!), be very careful about line breaks.
Although this was
apparently fixed in 4.0.5, I got the weirdest errors while testing PHP
scripts that I wrote in BBEdit (6.5) on MacOS X (10.2, running Apache
1.3.27 with PHP 4.1.2).
The Mac-style line breaks (\r) that BBEdit
usually produces by default confuse the PHP parser, and it will report the
strangest parse errors. (I even got errors in lines of code that were
commented out! This drove me nuts for days).
Your documents have to
use UNIX-style linebreaks (\n) to prevent these errors. It's advisable to
configure BBEdit to produce UNIX line breaks by default in every new
document (preferences!).
This problem possibly also occurs with
DOS/Win systems whose linebreaks are \r\n.
|
|
nd at mad dot scientist dot com
14-Feb-2003 11:07 |
|
As for the "an _SGML_ processing instruction is actually written as
<?php ..>, i.e. without a trailing question mark." issue I
rather prefer <xsl:text>?</xsl:text> at the very end of the
<xsl:processing-instruction> element. This nicely outputs a question
mark first and then the closing bracket, XML style
("?>").
Be sure to include the <xsl:text>
element, otherwise the parser may add additional whitespace after the
question mark.
Andreas
|
|
02-Mar-2003 09:45 |
|
11-Oct-2001 01:34 I use FrontPage 2000 exclusively for creating my
PHP documents. I use the <% %> style syntax. I can put code
anywhere, before head (as is required for cookie data) and anywhere else
in between. Using advanced flow control, i can design an entire page in
html, and then put PHP control statements around it. This is much easier
than <% echo %> commands. You can drop in/out of PHP at ANY time,
and the only reason to ever use <% echo %> is for variables. Save
yourself some hassle and write your html in html and avoid the echo mess.
|
|
|
| |