パーサの動作

パーサと実行は、二つの完全に分割されたステップになりました。ファイ ル中のコードの実行は、ファイル全体と必要なものが全て完全にパースさ れるまで行われません。

この分割により PHP 4では requireやincludeで読み込まれるファイルが 構文的に完全であることが新たに必要となっています。PHP 4では、制御 構造の異なる制御部をファイル境界をまたいで配置することはできません。 このため、for ループまたは whileループ、if 命令または switchブロックをあるファイルで開始し、 elseendif, casebreak 命令を別のファイ ルに置くことはできません。

ループまたは他の制御構造の中で追加のコードを読み込むことは、PHP 4 では、全く問題ありません。制御用のキーワードや対応する波括弧 {...} だけは、同じコンパイル単位(ファイルまたは eval()された文字列)の中に置く必要があります。

しかし、配布されているコードではこうした記法は非常に悪いスタイルで あるとみなされているようなので、この制約の影響は大きくないはずです。

使用ができなくなった他の機能としては、PHP 3ではほとんど使用され ていませんが、requireで読みこまれたファイルから値を返すというもの があります。includeで読み込まれたファイルから値を返すことは PHP 4でも可能です。