【问题标题】:Assigning NULL to a variable in PHP: what does that do?将 NULL 分配给 PHP 中的变量:这是做什么的?
【发布时间】:2012-06-22 14:57:31
【问题描述】:

在维护代码时,我遇到了循环,在循环结束时,几个变量被设置为NULL,如下所示:$var = NULL;。根据我在手册中的理解,NULL 主要是为了在 PHP 代码中进行比较。由于NULL没有类型,也不是字符串或数字,所以输出它是没有意义的。

很遗憾,我无法提供示例,但我认为 NULL 值正在写入我们代码中的文件。我的问题是:$var 在赋值后是否有值,并且回显/写入它会产生输出吗?

编辑: 我已阅读 NULL 上的 PHP 手册条目。无需在评论或答案中发布此内容:http://php.net/manual/en/language.types.null.php,或者因没有 RTM 而对我投反对票。谢谢!

【问题讨论】:

  • 我在我的帖子中提到,在我编辑之前,手册没有回答我的问题。我的意思是暗示我真的读过它。我想你是反对者之一?非常感谢。
  • 您可能想要添加一些实际(相关)代码来展示如何使用NULL。否则,您只会得到类似 RTM 的答案,因为您的问题似乎指出您不了解 NULL(在 PHP 中)的使用
  • 我否决了您的问题,因为它含糊不清,包含有关您工作的不必要的详细信息,并且缺少有关用例的相关详细信息。这导致各种(据说)无帮助的答案。我的反对不是因为读过或没有读过手册(尽管在你编辑之前也不是很清楚)
  • 现在怎么样了? (当然,除了缺乏用例)
  • 另外,感谢您解释反对意见!我不介意投反对票,但我想向他们学习:)

标签: php null


【解决方案1】:
[ghoti@pc ~]$ php -r '$i="foo"; print "ONE\n"; var_dump($i); unset($i); print "TWO\n"; var_dump($i); $i=NULL; print "THREE\n"; var_dump($i); print "\n"; if (isset($i)) print "Set.\n"; if (is_null($i)) print "is_null\n";'
ONE
string(3) "foo"
TWO
NULL
THREE
NULL
is_null
[ghoti@pc ~]$ 

isset() 的结果将是布尔值 false,但变量仍被定义。 isset() 函数最好命名为 isnotnull()。 :-P

请注意,is_null() 对于从未设置过的值也会返回 true。

耶 PHP。

【讨论】:

    【解决方案2】:

    null 与 PHP 中的任何其他值非常相似(实际上,它也是与字符串、int 等不同的数据类型)。

    但是,有一个重要区别:isset($var) 检查 var 是否存在并且是否具有非空值。

    如果您打算在分配新值之前再次读取变量,unset() 是错误的做法,但分配 null 完全没问题:

    php > $a = null;
    php > if($a) echo 'x';
    php > unset($a);
    php > if($a) echo 'x';
    Notice: Undefined variable: a in php shell code on line 1
    php >
    

    如您所见,unset() 实际上删除了变量,就像它从未存在一样,而分配 null 会将其设置为特定值(并在必要时创建变量)。

    null 的一个有用用例是默认参数,当您想知道它是否提供时,空字符串、零等也是有效的:

    function foo($bar = null) {
        if($bar === null) { ... }
    }
    

    【讨论】:

      【解决方案3】:

      PHP 中的 Null 表示没有为变量赋值。

      http://php.net/manual/en/language.types.null.php

      【讨论】:

      • 恐怕这不是我的问题。我在发帖前确定了 RTFM... :)
      • 链接到手册的英文版而不是 $other_language 版本通常是个好主意。
      • @toon81 该手册似乎确实回答了您的问题,因为它说明了 null 的使用,甚至表明 $var = NULL 是完全合法的
      • 谁说这不合法?阅读问题的标题。该手册页如何回答我的问题?
      • 很抱歉没有正确回答您的问题!我现在明白你的意思了:-)。很高兴看到 ghoti 正确回答了您的问题。
      【解决方案4】:

      可以将变量设置为NULL 以指示它不包含值。如果稍后在代码中检查变量是否为NULL,这是有道理的。

      一个变量可能被显式设置为 NULL 以释放它使用的内存。如果变量消耗大量内存,这是有道理的(请参阅this question)。

      试运行代码,你也许能找出确切的原因。

      【讨论】:

        【解决方案5】:

        看来,根据提供的信息执行 null 的目的是清除变量。

        您可以在 PHP 中通过将其设置为 NULL 或使用函数 unset() 来取消设置变量。

        unset() 销毁指定的变量。

        函数内部的 unset() 的行为可能会有所不同,具体取决于 你试图破坏什么类型的变量。

        如果一个全局变量在函数内部是 unset(),只有 局部变量被破坏。调用环境中的变量 将保留与调用 unset() 之前相同的值。

        【讨论】:

          【解决方案6】:

          Null 是一种特殊的数据类型,它只能有一个值,即它自己。也就是说,null 不仅是一种数据类型,而且是一种关键字文字数据类型的变量 null 是一个没有分配值的变量,当创建一个没有值的变量时,它会自动分配一个 null 值这是以便清除之前该内存位置中的任何垃圾,否则程序可能会尝试处理它

          【讨论】:

            猜你喜欢
            • 2014-01-28
            • 1970-01-01
            • 1970-01-01
            • 2018-03-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多