Если у вас есть оператор if:
<?php $a = 1; $b = 2; if ($a < $b) { $c = $a+$b; } ?>
Вы могли бы получить доступ к переменной $ c вне инструкции if следующим образом:
<?php $a = 1; $b = 2; if ($a < $b) { $c = $a+$b; } echo $c ?>
В PHP, if
него нет собственной области. Так что да, если вы определите что-то внутри оператора if
или внутри блока, тогда он будет доступен так же, как если бы вы определили его вне (если, конечно, код внутри блока или внутри оператора if
будет запущен).
Проиллюстрировать:
if (true) { $a = 5; } var_dump($a == 5); // true
Условие оценивается как true
, поэтому код внутри блока запускается. Определяется переменная $a
.
if (false) { $b = 5; } var_dump(isset($b)); // false
Условие оценивается как false
, поэтому код внутри блока не запускается. Переменная $b
не будет определена.
if ($c = 5) { } var_dump($c == 5); // true
Код внутри условия запускается, и $c
определяется как 5
( $c = 5
). Несмотря на то, что назначение выполняется внутри оператора if
, значение выживает на улице, потому что if
него нет области видимости. То же самое происходит for
, например, for ($i = 0, $i < 5; ++$i)
. $i
выйдет за пределы цикла for
, потому что for
него тоже нет области.
if (false && $d = 5) { } var_dump(isset($d)); // false
false
коротких замыканий и выполнение не достигает $d = 5
, поэтому переменная $d
не будет определена.
Подробнее о области PHP читайте на странице руководства по области переменных .
Область PHP полностью функциональна. Это не то же самое, что C или Java, где он локален для блока, в который вложены переменные.
Для области PHP:
// Global variable $a = 0; function f() { // Cannot be accessed outside of f() if (true) $b = 0; // However, it can still be accessed anywhere in f() $b += 1; }
Если вы хотите, чтобы переменная была глобальной, просто используйте глобальное ключевое слово:
// Global variable $a = 0; function f() { // Use $a from global scope global $a; // Modifies global $a $a += 1; } function g() { // Use $b from global scope, even though it hasn't been defined yet global $b; // Can be accessed outside of g() $b = 0; // Cannot be accessed outside of g(); this $a "shadows" the global version // The global $a is still 0 $a = 1; }
Если был выполнен оператор if
содержащий переменную, то да, вы можете получить доступ к переменной за пределами оператора if. Вот мысль о том, почему она работает именно так. Во многих языках программирования вы можете «объявить» переменную перед ее использованием, просто чтобы компилятор знал, что она есть. Например, в Java вы можете объявить «int», а затем использовать его так:
int number; if(true) number = 5;
В Java вы должны объявить такую переменную, прежде чем использовать ее в инструкции if-then. В php, однако, на самом деле нет способа сделать это. Поскольку php динамически типизирован, вы не можете написать int $number
. В Java компьютер выделяет 32-битный блок памяти (размер int) при объявлении переменной. По-моему, в php память не выделяется до тех пор, пока что-то не будет храниться в переменной. Лучший эквивалент «объявления» переменной php, о которой я мог думать, просто должен был бы написать:
$number; //This is NOT needed if(true) $number = 5;
Но когда вы смотрите на код, кажется странным просто написать $number
. Я думаю, что компьютер будет думать, что это так же странно, потому что, как я уже говорил, это динамически типизированный язык, и поэтому ему не нужно выделять целую кучу памяти для числа. Поэтому вы можете просто оставить это так:
if(true) $number = 5;
Зависит.
В PHP шансы да, это было бы, хотя, конечно, если isnt <b, то c не будет существовать, когда вы попадете в строку echo c, и ваш код будет жаловаться.
Однако на большинстве языков это не скомпилировалось по этой причине