PHP выдает ошибку внутри функции, даже если функция не выполняется на странице - PullRequest
7 голосов
/ 31 мая 2011

Если PHP является интерпретируемым языком (каждая строка выполняется так, как она достигнута), почему он выдает ошибки, если ошибка возникает внутри функции, которая никогда не выполняется?

Или, может быть, я не понимаю, что означает истолковано?

Например,

<?php 

$number = 1;

function square(){

 $foo = 1  //missing semicolon, throws error

}
echo $number;

?>

Ответы [ 3 ]

7 голосов
/ 31 мая 2011

Поскольку его синтаксис сначала анализируется в попытке токенизировать его, прежде чем интерпретатор PHP может быть запущен.

4 голосов
/ 31 мая 2011

Прежде чем страница действительно интерпретируется PHP, она запускается через препроцессор.Это выявляет любые ошибки на вашей странице до того, как она фактически начинает выполняться, и преформирует целый ряд других операций для подготовки вашего скрипта к интерпретации.

Это гарантирует, что синтаксис скриптов будет правильным прежде, чем что-либо произойдет, и именно поэтому PHP выдаетошибка даже через вашу функцию никогда не вызывается.

3 голосов
/ 31 мая 2011

Проблема не имеет ничего общего с тем, как выполняется PHP (кстати, с помощью байт-компиляции ...), а с тем, как анализируется код. С этой ошибкой синтаксический анализатор PHP не может собрать работающую программу в памяти и уведомляет вас о синтаксической ошибке.

...