Подтвердить что ты не робот

Если вы создаете переменную внутри оператора if, она доступна вне инструкции if?

Если у вас есть оператор 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
?>
4b9b3361

Ответ 1

В 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 читайте область видимости переменной на странице руководства.

Ответ 2

Область 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;
}

Ответ 3

Если оператор 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; 

Ответ 4

Зависит.

В PHP шансы да, это было бы, хотя, конечно, если isnt < b, то c не будет существовать, когда вы попадете в строку echo c, и ваш код будет жаловаться.

Однако в большинстве языков это не скомпилировалось по этой причине