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

Дано:

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

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

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

17 августа 2003 13:05

Улитка (инкогнито)
17 августа 2003, 17:33

Выведет false, потом true.

bolk (bolknote.ru)
17 августа 2003, 17:33, ответ предназначен Улитка

точно. знаешь или проверил?

Улитка (инкогнито)
17 августа 2003, 17:59

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

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

bolk (bolknote.ru)
17 августа 2003, 17:59, ответ предназначен Улитка

Вообще жаль, что они не изолируются.

derini (инкогнито)
18 августа 2003, 01:06

помню где-то в документации это тоже описывалось

bolk (bolknote.ru)
18 августа 2003, 01:06, ответ предназначен derini

Наверняка где-то есть. Но многим ли очевидно?

Caesar (инкогнито)
18 августа 2003, 18:09

Ибануца. Замечательный язык.

Болк, а зачем по твоему это нужно?
В смысле что функция глобальной оказывается.

bolk (bolknote.ru)
18 августа 2003, 18:09, ответ предназначен Caesar

Просто изоляции нет. А вот применить можно — вызовом одной или другой функции декларировать один или другой блок функций :))

Например, я подменяю в регистре 1.4 GD на два набора ф-й, в зависимости от настроек, можно, например, там это использовать.

eddie (инкогнито)
19 августа 2003, 10:32

этоже относится и к классам:
function x()
{
 class y
 {
   …
 }
}
$y=new y; // undeclared
x();
$y=new y;

а мне бывает полезна такая конcтрукция:
if(!function_exists('xxx'))
{
 function xxx(){…}
}

bolk (bolknote.ru)
19 августа 2003, 10:32, ответ предназначен eddie

Следовало ожидать — внутри функции вообще ничего не изолируется, кроме переменных.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)