Почему функция PHP должна быть перед вызовом при использовании if!

В следующем примере кода вызов функции 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 */

Если я делаю одно из следующего, это работает

  1. Переместить вызов после функции
  2. Закомментируйте определенный тест if!

Я хотел бы знать почему.

1

Решение

Во-первых, PHP анализирует файл на наличие общих ошибок и устанавливает символы. Так как я не авторитет в этом, я верю PHP выполняет проверку первого уровня для символов и более глубокую проверку соответствия синтаксиса.

С этой предпосылкой, если вы удалите if Заявление, весь код становится первым уровнем. Вызов функции будет работать, потому что символ функции будет зарегистрирован. Это также тот случай, когда вы перемещаете объявление функции перед вызовом функции с помощью if Заявление все еще там.

Вы можете обернуть вызов функции в function_exists проверьте, если вы должны обязательно позвонить до объявления.

1

Другие решения

Вы должны определить, что это за функция до Вы называете это и пытаетесь использовать это.

Также ваш 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 читает файл сверху вниз, слева направо. И поскольку это не файл класса, данные и синтаксис обрабатываются только в порядке их получения.

-1

По вопросам рекламы [email protected]