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

Har*_*tka 41 php variables

如果你有这样的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)


use*_*723 5

如果执行了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)