如果你有这样的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
?>
答案 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
,因此块内的代码无法运行。 1}}将不会被定义。
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行时你不会存在,你的代码就会抱怨。
然而,在大多数语言中,由于这个原因,这不会编译