HTML からの脱出
PHP のパーサは、開始タグと終了タグに囲まれていない部分をすべて無視します。
そのおかげで、PHP のファイルにそれ以外のコンテンツを混在させることができるのです。
たとえば PHP を HTML ドキュメントに組み込んで、テンプレートを作ったりすることもできます。
これは期待通りに動作します。なぜなら、PHP インタプリタは ?> 終了タグを見つけると
それ以降新たに開始タグを見つけるまでの内容を何でも出力するからです
(終了タグの直後の改行は別です。
命令の分離
を参照ください)。
しかし、PHP が条件文の中にいる場合は話が別です。
その場合は、まず条件式の結果を判定してから何をスキップするかを判断します。
次の例を参照ください。
条件文を使った例です。
例1 条件文を使った高度な脱出
<?php if ($expression == true): ?>
条件式が真の場合にこれが表示されます。
<?php else: ?>
それ以外の場合にこちらが表示されます。
<?php endif; ?>
この例では、PHP は条件を満たさないブロックを処理しません。たとえそれが
PHP の開始タグと終了タグに囲まれた部分でなくても、条件文にしたがってそこを読み飛ばします。
というのも、PHP のインタプリタは条件を満たさない箇所をブロックごと読み飛ばすからです。
大量のテキストを出力する際に
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 の設定には影響を受けません。