в php анализ кода происходит как-то так:
исходный код анализируется (проверяется синтаксис и.т.д.) и транслируется: т.е. сначала работает транслятор, он транслирует код в какой-то свой байт код.
Далее PHP интерпретирует полученный байт-код, т.е выполняет его "инструкцию" одну за другой.
=> в PHP есть комбинация из транслятора и интерпретатора
Т.е.,транслятор, дойдя до определения ф-ции, проверит корректность определения. и оттранслирует его во внутреннее представление +
Каждая ф-ция добавляется во внутреннюю таблицу функций PHP тогда, когда управление доходит до участка кода, содержащего определение этой функции.
Потом интерпретатор при вызове ф-ции начнет выполнение ее команд.
=> мы можем вызывать ф-ций до того, как они определены.
если есть условное определение:
$a = 10;
if ($a) {
function alert1() {echo "1";}
}
else {
function alert2() {echo "2";}
}
alert2();
получим ошибку
Fatal error: Call to undefined function alert2() in C:\xampp\htdocs\phptraining\index.php on line 59
Вроде по логике мы просто во время работы транслятора мы не "дошли" до определения функции alert2, => она не была добавлена во внутреннюю таблицу PHP функций
Но ведь по идее транслятор обрабатывает весь код? И до function alert2 он тоже должен дойти.