Объем объявленной функции внутри функции
Мне было интересно, почему 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.
Ответы
Ответ 1
В PHP все функции всегда глобальны, независимо от того, как и когда вы их определяете. (Анонимные функции частично являются исключением из этого.) И ваши определения функций будут, таким образом, глобальными.
Из документации:
Все функции и классы в PHP имеют глобальную область действия - их можно вызывать вне функции если они были определены внутри и наоборот.
Ответ 2
Когда вы определяете функцию внутри другой функции, она не существует пока не будет выполнена родительская функция. Как только родительская функция была выполнена, вложенная функция определена и как с любым функцию, доступную из любого места в текущем документе. если ты имеют вложенные функции в ваш код, вы можете выполнять только внешние функция один раз. Повторные вызовы будут пытаться обновить внутреннюю функции, которые будут генерировать ошибку.
Теперь все php-функции по умолчанию глобальны. Таким образом, ваша вложенная функция становится глобальной, вторая вы вызываете внешнюю функцию