Php 如果在If语句内部创建变量,则在If语句外部是否可用?
如果您有这样的If语句:Php 如果在If语句内部创建变量,则在If语句外部是否可用?,php,variables,Php,Variables,如果您有这样的If语句: <?php $a = 1; $b = 2; if ($a < $b) { $c = $a+$b; } ?> if(true) $number = 5; 您是否能够访问if语句之外的$c变量,如下所示: <?php $a = 1; $b = 2; if ($a < $b) { $c = $a+$b; } echo $c ?> int number; if(true) number = 5; 在PHP中,如
<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
?>
if(true)
$number = 5;
您是否能够访问if语句之外的$c变量,如下所示:
<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
echo $c
?>
int number;
if(true)
number = 5;
在PHP中,如果没有自己的作用域。因此,是的,如果您在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
变量
if ($c = 5) { } var_dump($c == 5); // true
有关PHP作用域的更多信息,请阅读手册页。视情况而定
在PHP中,很有可能是这样,当然,如果a不小于b,那么当您到达echo c行时,c就不存在了,您的代码会抱怨
然而,在大多数语言中,由于这个原因,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;
}
如果执行了包含变量的If
语句,则是,您可以在If语句之外访问变量。下面是一个关于它为什么会这样工作的想法。在许多编程语言中,您可以在使用变量之前“声明”它,只是为了让编译器知道它在那里。例如,在Java中,您可以声明一个“int”,然后像这样使用它:
<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
echo $c
?>
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
似乎有点奇怪。我认为计算机会认为这同样奇怪,因为正如我之前所说,它是一种动态类型语言,因此它不需要为数字分配整个内存块。因此,您可以将其保持如下状态:
<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
?>
if(true)
$number = 5;
当你试着运行代码时会发生什么?这就是我问的原因。我通常编写objective-c代码,其中c在范围外是无法访问的。答案很好,但示例(特别是($c=5){}
one)足以让任何人感到困惑。@Muhammad Yasir补充道。解释得很好!