Загадка про PHP. Номер 12.

Дано:

function Test1()
{
  function Test2()
  {
  }
}

var_dump(function_exists('Test2'));
Test1();
var_dump(function_exists('Test2'));

Что выведет функция var_dump в каждом случае?

Комментарии 10

Улитка № 3
Я еще ни одного примера отсюда не проверил в PHP! Все — только в голове, плюс справка.
Единственное что было, так это я выполнил list( $a[], $a[], $a[] ) = explode( " ", «this is array» ); — но уже после того, как прочел ответ, мне интересно стало.

Конкретно этот вопрос — то, что функция в функции не существует, пока не будет вызвана «родительская» функция, я знаю. И то, что она глобальной потом будет.
Один раз на практике использовал.
Caesar № 7
Ибануца. Замечательный язык.

Болк, а зачем по твоему это нужно?
В смысле что функция глобальной оказывается.
Евгений Степанищев автор № 8
Просто изоляции нет. А вот применить можно — вызовом одной или другой функции декларировать один или другой блок функций :))

Например, я подменяю в регистре 1.4 GD на два набора ф-й, в зависимости от настроек, можно, например, там это использовать.
eddie № 9
этоже относится и к классам:
function x()
{
class y
{
…
}
}
$y=new y; // undeclared
x();
$y=new y;

а мне бывает полезна такая конcтрукция:
if(!function_exists('xxx'))
{
function xxx(){…}
}
Евгений Степанищев автор № 10
Следовало ожидать — внутри функции вообще ничего не изолируется, кроме переменных.