php 在IF语句内部创建的变量是否也可以在IF语句外部使用?

k4ymrczo  于 2023-08-02  发布在  PHP
关注(0)|答案(4)|浏览(342)

如果你有一个这样的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
?>

4ngedf3f

4ngedf3f1#

在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作用域的更多信息,请阅读variable scope手册页。

rqdpfwrv

rqdpfwrv2#

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;
}

字符串
如果你想让一个变量是全局的,只需使用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;
}

owfi6suc

owfi6suc3#

如果执行了包含该变量的if语句,则可以在if语句之外访问该变量。这里有一个想法,为什么它的工作方式。在许多编程语言中,你可以在使用变量之前“声明”它,只是为了让编译器知道它在那里。例如,在Java中,你可以声明一个'int',然后像这样使用它:

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似乎有点奇怪。我想计算机也会觉得这很奇怪,因为我之前说过,它是一种动态类型语言,所以它不需要为数字分配一大块内存。所以你可以像这样离开它:

if(true)
    $number = 5;

jecbmhm3

jecbmhm34#

看情况了
在PHP中,可能是的,当然,如果a不是< B,那么当你到达echo c行时,c就不存在了,你的代码会抱怨。
然而,在大多数语言中,由于这个原因,它不会编译

相关问题