Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果在If语句内部创建变量,则在If语句外部是否可用?_Php_Variables - Fatal编程技术网

Php 如果在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中,如

如果您有这样的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中,
如果没有自己的作用域。因此,是的,如果您在
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补充道。解释得很好!