PHP и область видимости...
В стандартном мануале статья "Область видимости переменной" говорит лишь, что
Любая используемая внутри функции переменная по умолчанию ограничена локальной областью видимости функции. Например:
<?php $a = 1; /* глобальная область видимости */ function test() { echo $a; /* ссылка на переменную локальной области видимости */ } test(); ?>Этот скрипт не сгенерирует никакого вывода, поскольку выражение
echo
указывает на локальную версию переменной$a
, а в пределах этой области видимости ей не было присвоено значение.
С другой стороны, по той же доке,
ссылка
$value
на последний элемент массива остается даже после того, как операторforeach
завершил работу. Рекомендуется уничтожить ее с помощью функцииunset()
.
Стоит ли расценивать, что в показанном ниже коде поведение PHP некорректно -
<?php $names = array ('my','your','too'); $k = 0; foreach ($names as $name) { $$name = ++$k; } echo $my.' '.$your.' '.$too; ?>
- решайте сами... Но факт тот, что переменные, созданные внутри цикла через конструкцию $$name
(переменная переменных),
остаются видимы и вне его. В любом случае, полагаться на это свойство PHP не стоит.
P.S. В PHP 5.4 появились namespace
17.09.2014, 11:32 [9835 просмотров]