如果你有这样的if语句:
<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
?>
Run Code Online (Sandbox Code Playgroud)
您是否能够访问if语句之外的$ c变量,如下所示:
<?php
$a = 1;
$b = 2;
if ($a < $b) {
$c = $a+$b;
}
echo $c
?>
Run Code Online (Sandbox Code Playgroud)
rid*_*rid 58
在PHP中,if没有自己的范围.所以,是的,如果您在if语句内部或块内部定义某些内容,那么它就像在外部定义它一样可用(当然,假设块内部或代码内部的代码if运行).
为了显示:
if (true) { $a = 5; } var_dump($a == 5); // true
Run Code Online (Sandbox Code Playgroud)
条件求值为true,所以块内的代码运行.变量$a被定义.
if (false) { $b = 5; } var_dump(isset($b)); // false
Run Code Online (Sandbox Code Playgroud)
条件求值为false,因此块内的代码无法运行.该变量$b将不会被定义.
if ($c = 5) { } var_dump($c == 5); // true
Run Code Online (Sandbox Code Playgroud)
条件内的代码运行并$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
Run Code Online (Sandbox Code Playgroud)
false短路和执行没有到达$d = 5,因此$d不会定义变量.
有关PHP范围的更多信息,请阅读变量范围手册页.
Rét*_*roX 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您希望变量是全局变量,只需使用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;
}
Run Code Online (Sandbox Code Playgroud)
如果执行了if包含变量的语句,则是,您可以访问if语句之外的变量.这是为什么它以这种方式工作的想法.在许多编程语言中,您可以在使用之前"声明"变量,只是为了让编译器知道它就在那里.例如,在Java中,您可以声明一个'int',然后像这样使用它:
int number;
if(true)
number = 5;
Run Code Online (Sandbox Code Playgroud)
在Java中,您必须在if-then语句中使用它之前声明这样的变量.然而,在PHP中,没有真正的方法可以做到这一点.因为php是动态类型的,所以你不能写int $number.在Java中,计算机在声明变量时分配32位内存块(int的大小).在PHP中,我相信,直到某些内容实际存储在变量中才会分配内存.最好的相当于'声明'我能想到的一个php变量就是写:
$number; //This is NOT needed
if(true)
$number = 5;
Run Code Online (Sandbox Code Playgroud)
但是当你看代码时,$number就像那样编写它似乎有点奇怪.我认为计算机会认为它同样奇怪,因为正如我之前所说,它是一种动态类型语言,所以它不需要为数字分配一大块内存.所以你可以这样离开:
if(true)
$number = 5;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31529 次 |
| 最近记录: |