echo "Point1, a=".$a."\n"; echo "Point1, b=".$b."\n"; if(1<2) { $a = 6; $b['link'] = "here"; echo "Point2, a=".$a."\n"; echo "Point2, b[link]=".$b['link']."\n"; } echo "Point3, a=".$a."\n"; echo "Point3, b[link]=".$b['link']."\n";
Почему приведенный выше код распечатывает следующее?
Point1, a= Point1, b= Point2, a=6 Point2, b[link]=here Point3, a=6 Point3, b[link]=here
По моему мнению, масштаб $ a и $ b должен заканчиваться в фигурных скобках {}!
По моему мнению, масштаб $ a и $ b должен заканчиваться в фигурных скобках {}!
Только функции и методы имеют свои собственные локальные возможности. Другие управляющие структуры (петли, условия …) этого не делают.
Область переменных в руководстве по PHP
Первые $ a и $ b на самом деле бросают предупреждение, неопределенный индекс, поскольку они не были объявлены до вывода.
Область действия – это граница того, где вы можете получить доступ к переменной (или свойству или методу). Ваш код не является примером области, это синтаксический синтаксический анализ. В двойных кавычках php распознает и попытается оценить переменные. Поскольку $ b [..] – это то, как вы ссылаетесь на элемент массива, php попытается проанализировать его как таковой.
Кудрявые скобки используются для нескольких вещей. В контексте вашего кода они ограничивают начало и конец, если ваше условие if (…), как в
if (condition) { // do all // of this stuff // between the { and } // if the condition // is true }
Это не имеет никакого отношения к сфере видимости, если вы не хотите взглянуть на нее в смысле «это то, где код, который будет выполняться, если условие истинно начинается и заканчивается», но, как уже упоминалось, это не то, что «scope» действительно означает.
Вы также можете использовать {..}, чтобы указать php, где начинать и заканчивать имя переменной, чтобы избежать двусмысленности. Например:
В этом примере php попытается проанализировать переменную как $ abar, поскольку это допустимое имя переменной:
$a = "foo"; $b = "$abar" echo $b; // output : nothing - $abar doesn't exist (will give you a notice)
Поскольку вы хотите, чтобы он разбирал $ a not $ abar, вы должны использовать {..}, чтобы указать начало и конец имени переменной:
$a = "foo"; $b = "${a}bar" echo $b; // output : foobar
В PHP только функции вводят новую область, в отличие от Java и других языков: (((Итак, если вам нужна новая область, вам нужно создать новую функцию и вызвать ее.
$a = 1; call_user_func(function(){ //new local scope $a = 99999; }); echo $a; //will print 1