PHP がインタープリター型言語 (すべての行に到達すると実行される) の場合、決して実行されない関数内でエラーが発生すると、なぜエラーがスローされるのでしょうか?
それとも、解釈された意味がわからないのでしょうか?
例えば
<?php
$number = 1;
function square(){
$foo = 1 //missing semicolon, throws error
}
echo $number;
?>
PHP がインタープリター型言語 (すべての行に到達すると実行される) の場合、決して実行されない関数内でエラーが発生すると、なぜエラーがスローされるのでしょうか?
それとも、解釈された意味がわからないのでしょうか?
例えば
<?php
$number = 1;
function square(){
$foo = 1 //missing semicolon, throws error
}
echo $number;
?>
その構文は、PHP インタープリターが開始する前に、トークン化する試みで最初に解析されるためです。
ページは PHP によって実際に解釈される前に、プリプロセッサを介して実行されます。これにより、ページが実際に実行を開始する前にページ内のエラーが検出され、スクリプトを解釈できるように準備するためのさまざまな操作が実行されます。
これにより、何かが起こる前にスクリプトの構文が正しいことが保証されます。これが、関数が呼び出されない場合でも PHP がエラーをスローする理由です。
この問題は、PHP の実行方法 (ちなみにバイトコンパイルされています...) とは関係なく、コードの解析方法とは関係ありません。そのエラーがあると、PHP パーサーはメモリ内で動作するプログラムを構築できず、構文エラーが通知されます。