【问题标题】:Why the prevoius value still exists after reinitialaize variable - PHP为什么初始化变量后之前的值仍然存在 - PHP
【发布时间】:2015-03-03 07:02:02
【问题描述】:

我遇到了一个教程,当我们重新初始化一个具有值的变量时,不是删除该值,而是该变量仍然具有以前的值。

我期待第三个 var_dump NULL ,但它打印 volvo 。 这不是在代码中造成令人困惑的事情吗?

$carName;
var_dump($carName);

$carName = "Volvo";
var_dump($carName);

$carName; 
var_dump($carName);



NULL
string(5) "Volvo"
string(5) "Volvo"

我还看到javascript 具有相同的行为。

这是语言的好特性还是坏特性。 根据我的想法,这很糟糕,请解释一下。提前致谢 。

【问题讨论】:

  • 在像varname; 这样的换行符上声明一个变量不会用我知道的任何语言重新初始化它

标签: javascript php


【解决方案1】:

$carname; 实际上什么也没做。它既没有将变量用于任何操作,也没有为它分配任何东西。在 PHP 中,变量是通过为它们分配一些东西来“初始化”的。如果有的话,$carname; 与没有echoecho $carname; 相同,它只是一个NOOP。事实上,第一行也没有做任何事情,第一个var_dump 触发了Undefined variable carname 通知。

【讨论】:

    【解决方案2】:

    写作:

    $carName;
    

    不初始化变量。它读取变量,但不对读取的值做任何事情。

    你需要给它分配null

    $carName = null;
    

    【讨论】:

    • 嗨,但在第一个 $carName;它打印 NULL 而不使用 $carName = null;对吗?
    • @KanishkaPanamaldeniya 这个是,因为变量没有初始化,所以为null
    • 开启错误报告,你会在第一行看到关于使用未初始化变量的警告。
    【解决方案3】:

    PHP 的最新实现完全忽略了$carName; 行。

    $data;
    echo $data;
    

    操作码。

    line     # *  op                 fetch          ext  return  operands
    -----------------------------------------------------------------------
       4     0  >   ECHO                                          !0
             1    > RETURN                                         1
    

    http://3v4l.org/c3snU/vld#tabs

    其他实现将此行视为读取操作并引发Undefined variable 通知。

    http://3v4l.org/c3snU#vhhvm-350

    【讨论】:

      【解决方案4】:

      如果您需要 $carName 为 null,则应将其设置为 null:

      $carName = null;
      

      $车名;一个人什么都做不了。

      【讨论】:

        猜你喜欢
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        • 1970-01-01
        • 2014-08-25
        相关资源
        最近更新 更多