如果在 if 语句中创建变量,那么它在 if 语句之外是否可用?

2022-08-30 10:30:37

如果您有这样的 if 语句:

<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
?>

您是否能够在 if 语句之外访问$c变量,如下所示:

<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
echo $c
?>

答案 1

在 PHP 中,没有自己的范围。所以,是的,如果你在语句内部或块内定义了一些东西,那么它将可用,就像你在外面定义它一样(当然,假设块内或语句内的代码可以运行)。ififif

举个例子:

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

条件内的代码将运行并定义为 ()。即使赋值发生在语句内部,该值也会在语句外部继续存在,因为没有作用域。同样的事情也发生在 上,例如 在 中。它们将在循环之外存活,因为也没有范围。$c5$c = 5ififforfor ($i = 0, $i < 5; ++$i)$iforfor

if (false && $d = 5) { }  var_dump(isset($d)); // false

false短路并且执行未到达,因此不会定义变量。$d = 5$d

有关 PHP 作用域的详细信息,请阅读变量作用域手册页。


答案 2

PHP的范围是完全基于函数的。它与C或Java不同,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 关键字:

// 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;
}

推荐