В следующем примере кода вызов функции o_h_loaded перед самой функцией. Это приводит к фатальной ошибке: Uncaught Error: вызов неопределенной функции o_h_loaded ().
<?php
if ( !defined( "O_H" ) ) {
define( "O_H", "O_H" );
o_h_loaded();
function o_h_loaded() {
echo "o_h_loaded";
}
} /* end if */
Если я делаю одно из следующего, это работает
Я хотел бы знать почему.
Во-первых, PHP анализирует файл на наличие общих ошибок и устанавливает символы. Так как я не авторитет в этом, я верю PHP выполняет проверку первого уровня для символов и более глубокую проверку соответствия синтаксиса.
С этой предпосылкой, если вы удалите if
Заявление, весь код становится первым уровнем. Вызов функции будет работать, потому что символ функции будет зарегистрирован. Это также тот случай, когда вы перемещаете объявление функции перед вызовом функции с помощью if
Заявление все еще там.
Вы можете обернуть вызов функции в function_exists
проверьте, если вы должны обязательно позвонить до объявления.
Вы должны определить, что это за функция до Вы называете это и пытаетесь использовать это.
Также ваш defined
запрос спрашивает, была ли определена константа, а не функция.
Вот рабочая редакция вашего кода:
<?php
//declare what the function is at the start of the page
function o_h_loaded() {
echo "o_h_loaded";
}
if ( !defined( "O_H" ) ) { // This call has nothing to do with
define( "O_H", "O_H" ); // The function declared above.
// Now call to the function declared already. Hence resolving the fatal error.
o_h_loaded();
} /* end if */
Чтобы ответить на ваш вопрос — причина, по которой он работает таким образом, заключается в том, что PHP читает файл сверху вниз, слева направо. И поскольку это не файл класса, данные и синтаксис обрабатываются только в порядке их получения.