PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<SprachreferenzAbgrenzung von Anweisungen>
view the version of this page
Last updated: Sat, 19 Apr 2003

Kapitel 6. Grundlagen der Syntax

Den 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
add a note
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.

add a note

<SprachreferenzAbgrenzung von Anweisungen>
 Last updated: Sat, 19 Apr 2003
show source | credits | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by: /
Last updated: Mon May 12 21:12:21 2003 CEST