Как PHP обрабатывает функции в файле? - PullRequest
0 голосов
/ 13 ноября 2009

Скажем, у меня есть file.php с тремя функциями и оператором echo:

function one() {
    return three() . ' This is one.';
}

function two() {
    return 'This is two.';
}

function three() {
    return 'This is three.';
}

echo one(); // string(xx) "This is three. This is one."

Во-первых, допустимо ли вообще function one() вызывать function three(), хотя позже в файле появляется function three()?

Во-вторых, когда в браузер загружается file.php (таким образом, выполняется PHP на сервере), вычисляет ли PHP возвращаемое значение function two(), даже если оно никогда не вызывается?

Любые ссылки для дальнейшего чтения о том, как PHP обрабатывает такие мирские вещи, как это было бы здорово.

Ответы [ 5 ]

7 голосов
/ 13 ноября 2009

Во-первых, приемлемо ли вообще есть функция one () вызывать функцию три (), хотя функция три () появится позже в файле?

Конечно. Порядок исходных текстов не имеет никакого отношения к порядку, в котором вы вызываете функции - он все анализируется и доступен до выполнения первой строки.

Во-вторых, когда файл file.php загружен в браузер, PHP рассчитывает возврат значение функции two (), хотя это никогда не называется?

Нет. Он будет проверен на синтаксические ошибки во время синтаксического анализа, но это все - это будут ошибки уровня E_PARSE. Другие ошибки могут быть обнаружены только во время выполнения и будут ошибками уровня E_ERROR, E_WARNING или E_NOTICE.

http://us2.php.net/manual/en/errorfunc.constants.php

1 голос
/ 13 ноября 2009

PHP ищет имена классов и функций, когда они используются во время выполнения, а не в соответствии с тем, когда рассматриваемый код анализируется впервые.

Итак, выполнение three() внутри one() в порядке, до тех пор, пока объявление функции three() анализируется до запуска one() в первый раз.

1 голос
/ 13 ноября 2009

Для вашего второго вопроса ответ НЕТ, он не запускает функцию, если он не вызван специально. И не имеет значения, в каком порядке написаны функции, поэтому ваш код будет работать.

PHP не запускается в браузере, он запускается сервером.

0 голосов
/ 13 ноября 2009

к моменту вызова one () три () уже определены, поэтому проблем нет.

two () не будет оцениваться, пока вы не вызовете two ().

http://www.php.net/manual/en/functions.user-defined.php

0 голосов
/ 13 ноября 2009

Порядок объявления функции или класса не имеет значения. Единственный момент - объявить перед звонком. Если два не будут вызваны, он будет проанализирован, но не оценен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...