Я задал вопрос в прошлом месяце о проблеме в PHP, вызывающей функцию в одном включаемом файле, который определен в последующем включаемом файле. Эта проблема возникла при преобразовании ASP-сайта в PHP. Теперь я вижу, что проблема повторяется. Похоже, что Javascript и PHP обрабатывают определения функций во включаемых файлах совершенно по-разному.
(Изменить: я говорю здесь полностью о серверных сценариях, ничего о стороне клиента.)
- В моих ASP-файлах (написанных на Javascript) я смог вызвать функцию в файле
#include
d, когда функция была определена в файле #include
d после этого.
- В PHP это не работает. Похоже, что функция должна быть определена в том же файле или в файле
include()
d до той, в которой она вызывается.
Это наводит на мысль о существенном различии в работе Javascript и PHP, которое я нигде не нашел документированным. Похоже, что Javascript компилирует все включенные файлы перед продолжением выполнения, тогда как PHP компилирует и выполняет каждый включаемый файл, прежде чем перейти к следующему включаемому файлу.
Страница справочника PHP по пользовательским функциям гласит: «Функции не должны быть определены до обращения к ним, за исключением случаев, когда функция определена условно». Похоже, что он также должен сказать, «и за исключением случаев, когда функция определена и вызывается в разных файлах включения». Страница руководства для include () также не решает эту проблему.
В Javascript мне приходилось думать стратегически об определении важных переменных в самых ранних включаемых файлах, чтобы они были доступны для использования при необходимости, но функции могли быть определены в любом включаемом файле и использоваться при необходимости. Но в PHP кажется, что мне нужно применять стратегическое мышление там, где я также определяю свои функции.
Кажется, что если я прав насчет того, что я здесь написал, это действительно существенное различие между Javascript и PHP, о котором следовало бы написать раньше. Так я ошибаюсь и что-то не так понял?