【问题标题】:What does the unassigned static variable in PHP contain and why it prints blank space in a browser output window?PHP中未分配的静态变量包含什么以及为什么它在浏览器输出窗口中打印空白?
【发布时间】:2018-01-04 05:29:43
【问题描述】:

我有以下代码sn-p,请仔细看一下:

<!DOCTYPE html>
<html>
  <body>

  <?php
    function myTest() {
      static $x;
      echo $x;
      $x++;
    }

    myTest();
    echo "<br>";
    myTest();
    echo "<br>";
    myTest();
   ?> 

  </body>
</html>

注意:包含上述代码的文件的名称是demo.php,它在我的笔记本电脑上的位置是C:\xampp\htdocs\php_playground \demo.php

当我通过点击 URL http://localhost/php_playground/demo.php 在浏览器中运行上述程序时收到的输出如下:

1
2 

同样的截图也附上,请看一下。

  1. 我的问题是为什么输出中的第一行是空白的 只有空白?
  2. 为什么它不打印 0 或类似单词“NULL”或“Empty”之类的东西?
  3. PHP 中未赋值的静态变量实际上包含什么?
  4. 静态未赋值变量的默认值和未赋值普通变量的默认值是否不同?

请给我适当的答案和适当的解释。

【问题讨论】:

  • static $x; 会将变量设置为null,直到您明确将其设置为其他值。由于您将其用作整数,因此请给它一个默认值:static $x = 0; “空白空间”不是值,而是您的 &lt;br /&gt;
  • @MagnusEriksson :如果是这样,那为什么它没有在浏览器输出窗口中打印“null”这个词?
  • 因为null 不是字符串。一个变量在定义时为空,但没有任何值(因此它不会打印任何内容)。 Read more about NULL in the documentation
  • @MagnusEriksson:据我所知,字符串是一组字符,而单词“null”是由字符(即字母)'n'、'u'、'l 组合而成的组' 和我'。那么为什么字符串“null”没有在浏览器输出窗口中打印出来呢?
  • null数据类型 而不是字符串。这是null 不是'null'。最后的评论要么是纯粹的拖钓,要么你真的需要阅读我发布的链接,然后再继续。

标签: php variables static default-value static-variables


【解决方案1】:

PHP 中未分配的变量被强制转换为NULL

&lt;?php echo NULL; ?&gt; 不回显任何内容,因为NULL 没有任何价值。

来自NULL page of the PHP documentation(强调我的):

特殊的 NULL 值表示一个没有值的变量。 NULL 是 null 类型唯一可能的值。

如果满足以下条件,则认为变量为 null:

  • 它已被分配常量 NULL。

  • 尚未设置为任何值。

  • 已取消设置()。

尝试在您的 sn-p 中将echo $x; 替换为var_dump($x),它将输出以下内容:

NULL
int(1)
int(2)

Try it

【讨论】:

    【解决方案2】:

    因为 NULL 什么都不是,它只是一个变量。您会得到 2 个输出,因为第一次调用它时会使用值初始化:1,然后递增。

    <?php
        function myTest() {
          static $x;
          echo $x;
          $x++;
        }
    
        myTest(); // INIT
        echo "<br>";
        myTest(); // 1
        echo "<br>";
        myTest(); // +1
       ?> 
    

    如果您将 $x 声明为 0,那么它将打印 0。

    静态变量(classes),(functions

    【讨论】:

    • 这有点令人困惑:“因为不是 NULL 它什么都不是”。我猜你会说:“因为 NULL 什么都不是”
    • @MagnusEriksson 我们都会犯错……如果你明白我的意思,那么其他人也会犯错。
    【解决方案3】:

    因为第一步变量在“静态”中赋值,但不包含任何值;

    是一样的

    $t = null;
    echo $t;
    

    为什么它不打印 0 或类似“NULL”或“Empty”之类的东西?

    因为 null 它是“没什么可看的”,变量已定义但没有任何值

    PHP 中未赋值的静态变量实际上包含什么? 写完这段代码后

    static $x;
    

    您可以在全局内存中获取范围以将数据保存到其中。 我们知道这个变量与内存中的当前空间相关联。

    写完之后

    unset($x)
    

    你清除内存中的这个空间(数据)并删除到这个空间的链接(变量)。

    静态未赋值变量的默认值和普通未赋值变量的默认值有区别吗?

    是的,它是不同的。因为如果你不分配变量

    echo $test;
    

    你得到错误 - 注意:未定义的变量:

    因为你真的没有这个变量和之后

    static $test;
    echo $test;
    

    现在你有了这个变量并且你已经链接到内存,但是在这个内存中你没有任何数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2011-02-13
      相关资源
      最近更新 更多