Загадка про PHP. Номер 12.
Дано:
function Test1()
{
function Test2()
{
}
}
var_dump(function_exists('Test2'));
Test1();
var_dump(function_exists('Test2'));
Что выведет функция var_dump в каждом случае?
Выведет false, потом true.
Комментарий для Улитка:
точно. знаешь или проверил?
Я еще ни одного примера отсюда не проверил в PHP! Все — только в голове, плюс справка.
Единственное что было, так это я выполнил list( $a[], $a[], $a[] ) = explode( « „, „this is array“ ); — но уже после того, как прочел ответ, мне интересно стало.
Конкретно этот вопрос — то, что функция в функции не существует, пока не будет вызвана „родительская“ функция, я знаю. И то, что она глобальной потом будет.
Один раз на практике использовал.
Комментарий для Улитка:
Вообще жаль, что они не изолируются.
помню где-то в документации это тоже описывалось
Комментарий для derini:
Наверняка где-то есть. Но многим ли очевидно?
Ибануца. Замечательный язык.
Болк, а зачем по твоему это нужно?
В смысле что функция глобальной оказывается.
Комментарий для Caesar:
Просто изоляции нет. А вот применить можно — вызовом одной или другой функции декларировать один или другой блок функций :))
Например, я подменяю в регистре 1.4 GD на два набора ф-й, в зависимости от настроек, можно, например, там это использовать.
этоже относится и к классам:
function x()
{
class y
{
…
}
}
$y=new y; // undeclared
x();
$y=new y;
а мне бывает полезна такая конcтрукция:
if(!function_exists(’xxx’))
{
function xxx(){…}
}
Комментарий для eddie:
Следовало ожидать — внутри функции вообще ничего не изолируется, кроме переменных.