PHP のパーサは、開始タグと終了タグに囲まれていない部分をすべて無視します。 そのおかげで、PHP のファイルにそれ以外のコンテンツを混在させることができるのです。 たとえば PHP を HTML ドキュメントに組み込んで、テンプレートを作ったりすることもできます。
<p>この部分は PHP から無視され、そのままブラウザには表示されます。</p>
<?php echo '一方、この部分はパースされます。'; ?>
<p>この部分も PHP から無視され、そのままブラウザには表示されます。</p>
条件文を使った例です。
例1 条件文を使った高度な脱出
<?php if ($expression == true): ?>
条件式が真の場合にこれが表示されます。
<?php else: ?>
それ以外の場合にこちらが表示されます。
<?php endif; ?>
大量のテキストを出力する際に echo や print を用いることを考えると、このように一度 PHP のパースモードを抜けるほうが効率的です。
PHP 5 では、PHP の cnfigure 方法に応じて最大で五種類の開始タグ・終了タグが使えます。
そのうちの二つである
<?php ?>
と
<script language="php"> </script>
は、常に使えます。
また、短い形式の echo タグ <?= ?>
も、
PHP 5.4.0 以降では常に使えます。
残りの二種類は、短縮型のタグと ASP スタイルのタグです。 中には短縮型のタグや ASP スタイルのタグを 便利に感じる人がいるかも知れませんが、長いタグに比べると移植性に欠けます。 また一般的には推奨されていません。
注意:
さらに注意しなければならないことがあります。PHP コードを XML や XHTML に 埋め込む場合には、標準規格に従うために <?php ?> タグを使用する 必要があるでしょう。
PHP 7 では、ASP タグや
<script language="php">
タグが使えなくなりました。これから PHP のコードを書くときには、
互換性を考慮して <?php ?>
や <?= ?>
だけを使うことを推奨します。
例2 PHP の開始タグと終了タグ
1. <?php echo 'XHTMLまたはXMLドキュメントの中でPHPコードを扱いたい場合は、このタグを使いましょう'; ?>
2. 短縮型の echo タグを使って <?= 'この文字列を表示' ?> とすることもできます。
これは PHP 5.4.0 以降では常に使えて、
<?php echo 'この文字列を表示' ?> と同じ意味になります。
3. <? echo 'このコードは短縮型のタグに囲まれていますが、'.
'short_open_tag が有効な場合ににしか動作しません'; ?>
4. <script language="php">
echo '(FrontPageのような) いくつかのエディタは、このタグの中の処理命令を好みません';
</script>
この構文は、PHP 7.0.0 で削除されました。
5. <% echo 'オプションでASP形式のタグを使用可能です'; %>
<%= $variable; %> これは、<% echo $variable; %> のショートカットです。
これらの構文は、PHP 7.0.0 で削除されました。
短縮型のタグ(例 3.)が有効なのは、php.ini 設定ファイルのディレクティブ short_open_tag が 有効になっている場合か PHP が --enable-short-tags オプションつきで configure されている場合のみです。
ASP 型のタグ(例 5.)が有効なのは、 php.ini 設定ファイルのディレクティブ asp_tags が有効になっている場合のみです。 また、このタグは PHP 7.0.0 で廃止されました。
注意:
再利用されるか、または、自分の制御下にないPHPサーバーで運用される アプリケーションまたはライブラリを開発する場合、短縮型のタグの 使用は避けるべきです。これは、短縮型のタグがターゲットサーバー でサポートされていない可能性があるためです。 可搬性のある、再配布可能なコードでは、短縮型のタグを使用しない ようにしてください。
注意:
PHP 5.2 以前では、開始タグ <?php だけを書いてそれ以外に何も書いていないファイルは パーサが処理することができませんでした。PHP 5.3 以降では、開始タグの後に空白が一文字でもあればそのようなファイルもパースできます。
注意:
PHP 5.4 以降では、短い形式の echo タグ <?= は常に有効なタグとして認識されるようになりました。 short_open_tag の設定には影響を受けません。