Понимание областей переменных в php

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