Понимание переменных областей в php - PullRequest
2 голосов
/ 23 августа 2010
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 должна заканчиваться в фигурных скобках {}!

Ответы [ 4 ]

11 голосов
/ 23 августа 2010

В моем понимании область действия $ a и $ b должна заканчиваться в фигурных скобках {}!

Только локальные области видимости имеют только функции и методы.Другие управляющие структуры (циклы, условия ...) этого не делают.

Область действия переменной в руководстве по PHP

1 голос
/ 01 ноября 2015

В PHP только функции вводят новую область видимости, в отличие от Java и других языков: ((( Поэтому, если вам нужна новая область действия, вам нужно создать новую функцию и вызвать ее.

$a = 1;


 call_user_func(function(){
     //new local scope
     $a = 99999;
});


echo $a;   //will print 1
1 голос
/ 23 августа 2010

Первые $ a и $ b на самом деле выдают предупреждение, неопределенный индекс, так как они не были объявлены до вывода.

0 голосов
/ 23 августа 2010

Область действия - это граница, где вы можете получить доступ к переменной (или свойству или методу).Ваш код не является примером области видимости, это синтаксический анализ.В двойных кавычках php распознает и попытается оценить переменные.Поскольку $ b [..] - это способ обращения к элементу массива, php попытается проанализировать его как таковой.

Фигурные скобки используются для нескольких вещей.В контексте вашего кода они разграничивают начало и конец, если ваше условие if (...), как в

if (condition)
  {
    // do all
    // of this stuff
    // between the { and }
    // if the condition
    // is true
  }

Это не имеет ничего общего с областью видимости, если только вы не хотите смотреть на него всмысл «это где код, который будет выполняться, если условие истинно, начинается и заканчивается», но, как уже упоминалось, это не то, что на самом деле означает «область».

Вы также можете использовать {..}, чтобы сообщить php, где начинать и заканчивать имя переменной, чтобы избежать неоднозначности.Например:

В этом примере php попытается проанализировать переменную как $ abar, поскольку это допустимое имя переменной:

$a = "foo";
$b = "$abar"
echo $b; // output : nothing - $abar doesn't exist (will give you a notice)

Так как вы хотите, чтобы она анализировала $ a, а не $abar, вы бы использовали {..}, чтобы указать начало и конец имени переменной:

$a = "foo";
$b = "${a}bar"
echo $b; // output : foobar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...