Размещение функций PHP PHP

Рассмотрим этот фрагмент:

function f() { return 'hi'; } echo f(); 

Vs этот фрагмент:

 echo f(); function f() { return 'hi'; } 

Когда я запускаю скрипты, они оба дают одинаковые результаты. Замечательно.

Но мой вопрос (и я не мог найти хороший ответ или ссылку в любом из моих поисков), нормально ли вызывать функцию до ее определения (т. Е. От последовательного синтаксического анализа перспективы файла сценария)?

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

Related of "Размещение функций PHP PHP"

Из руководства :

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

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

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

Примечание . Следующий код даст фатальную ошибку, потому что функция будет определена только при запуске rime.

 <?php echo helloWorld(); if(1){ function helloWorld() { return 'hello world'; } } ?> 

шаги компилятора:

  • Преобразует последовательность символов в токены
  • Анализирует маркеры, чтобы определить там грамматическую структуру.
  • Генерирует байтовый код в зависимости от результатов анализа

Таким образом, самый простой способ понять это только потому, что сценарий не многопоточен, не означает, что он обрабатывается одним способом.

PHP Читает весь ваш исходный код в токенах перед его исполнением, потому что для него сначала нужно выполнить контроль над порядком токенов.

Возьмем этот пример

 while(true) { print '*'; } в while(true) { print '*'; } 

Каждая строка представляет собой последовательность символов, поэтому PHP интерпретирует это как

 if #T_IF #T_WHITESPACE ( #T_WHITESPACE true #T_STRING #T_WHITESPACE ) #T_WHITESPACE { #T_WHITESPACE print #T_PRINT #T_WHITESPACE '*'; #T_CONSTANT_ESCAPED_STRING #T_WHITESPACE } 

но только потому, что его прочитали, это не значит, что он был выполнен.

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

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

там загружен в начале выполнения.

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

Это одна СЕРЬЕЗНАЯ gotcha в PHP.

Это позволяет предположить, что это включает в себя копирование / вставка всего, что было в другом файле, в код. Но это происходит только тогда, когда они запускаются в коде. Это означает, что они могут быть динамическими и основаны на запущенном коде. Но это также означает, что они не могут быть предварительно обработаны и связаны заранее.

Я считаю хорошей практикой сначала определить свои функции, а потом назвать их, но не имеет значения, где вы их ставите, пока они там;)

Кроме того, мне нравится, когда мои функции разделены в разных php-файлах, в зависимости от использования, просто чтобы быть организованным 🙂

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