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

时间:2011-06-05 15:51:00

标签: php variables

如果你有这样的if语句:

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

您是否能够像if语句一样访问if语句之外的$ c变量:

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

4 个答案:

答案 0 :(得分:56)

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

举例说明:

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变量。

有关PHP范围的更多信息,请阅读variable scope手册页。

答案 1 :(得分:12)

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关键字:

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

答案 2 :(得分:5)

如果执行了包含变量的if语句,则是,您可以访问if语句之外的变量。这里考虑了为什么它以这种方式工作。在许多编程语言中,您可以声明&#34;一个变量在你使用它之前,只是为了让编译器知道它在那里。例如,在Java中,您可以声明一个&#39; int&#39;,然后像这样使用它:

int number;
if(true)
    number = 5;

在Java中,在if-then语句中使用它之前,必须先声明一个这样的变量。然而,在PHP中,实际上并没有这样做的方法。由于php是动态类型的,因此您无法编写int $number。在Java中,计算机在声明变量时分配32位内存块(int的大小)。在PHP中,我相信,直到某些内容实际存储在变量中才会分配内存。最好等同于宣布&#39;我能想到的一个php变量就是写:

$number;    //This is NOT needed
if(true)
    $number = 5;

但是当你看代码时,像这样写$number似乎有些奇怪。我认为计算机会认为它同样奇怪,因为正如我之前所说,它是一种动态类型语言,所以它不需要为数字分配一大块内存。所以你可以这样离开:

if(true)
    $number = 5; 

答案 3 :(得分:4)

取决于

在PHP中,机会是肯定的,但是当然,如​​果不是&lt; b,当你到达echo c行时你不会存在,你的代码就会抱怨。

然而,在大多数语言中,由于这个原因,这不会编译