如果在 if 语句中创建变量,那么它在 if 语句之外是否可用?
如果您有这样的 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
?>
如果您有这样的 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
?>
在 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不同,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;
}