Объем объявленной функции внутри функции

Мне было интересно, почему 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-функции по умолчанию глобальны. Таким образом, ваша вложенная функция становится глобальной, вторая вы вызываете внешнюю функцию