Объем объявленной функции внутри функции - PullRequest
15 голосов
/ 20 января 2011

Мне было интересно, почему 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" );
    } 
  }
}

}

Кто-нибудь может объяснитьэто со мной, почему это случилось?Спасибо за ваш ответ.

Привет.

Ответы [ 2 ]

11 голосов
/ 20 января 2011

В PHP все функции всегда глобальные, независимо от того, как и когда вы их определяете. (Анонимные функции отчасти являются исключением из этого.) Таким образом, оба ваших определения функций будут глобальными.

Из документации :

Все функции и классы в PHP имеют глобальную область видимости - их можно вызывать даже вне функции если они были определены внутри и наоборот.

2 голосов
/ 20 января 2011

Когда вы определяете функцию в другой функции, она не существует пока родительская функция не будет выполнена. Как только родительская функция имеет была выполнена, вложенная функция определена и как с любым функция, доступная из любого места в текущем документе. если ты есть вложенные функции в вашем коде, вы можете выполнять только внешние функционировать один раз. Повторные вызовы попытаются переопределить внутренний функции, которые будут генерировать ошибку.

Теперь все функции php являются глобальными по умолчанию. Таким образом, ваша вложенная функция становится глобальной, как только вы вызываете внешнюю функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...