Мне было интересно, почему php обрабатывает область действия объявленной функции в функции по-разному, когда функция объявляется внутри функции класса.
Например:
function test() // global function { function myTest() // global function. Why? { print( "Hello world" ); } } class CMyTestClass { public function test() // method of CMyTestClass { function myTest() // This declaration will be global! Why? { print( "Hello world" ); } } } }
Может ли кто-нибудь объяснить это мне, почему это происходит? Спасибо за ваш ответ.
Greetz.
В PHP все функции всегда глобальны, независимо от того, как и когда вы их определяете. (Анонимные функции частично являются исключением из этого.) И ваши определения функций будут, таким образом, глобальными.
Из документации :
Все функции и классы в PHP имеют глобальную область действия – их можно вызывать вне функции, даже если они были определены внутри и наоборот.
Когда вы определяете функцию внутри другой функции, она не существует, пока не будет выполнена родительская функция. После выполнения родительской функции вложенная функция определяется и как любая функция, доступная из любого места в текущем документе. Если у вас есть вложенные функции в вашем коде, вы можете выполнять только внешнюю функцию один раз. Повторные вызовы будут пытаться обновить внутренние функции, которые будут генерировать ошибку.
Теперь все функции php глобальны по умолчанию. Таким образом, ваша вложенная функция становится глобальной, вторая вы вызываете внешнюю функцию