【问题标题】:Strange output after calling unset() [duplicate]调用 unset() 后的奇怪输出 [重复]
【发布时间】:2018-08-23 20:02:16
【问题描述】:

documentation for NULL 表示如果我在变量上调用unset(),该变量将变为 NULL:

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

它已被分配了常量 NULL。

尚未设置任何值。

已取消设置()。

但是,tutorial 表示在变量上调用 unset() 时会发生以下情况:

PHP 在符号表中查找与 this 对应的 zval 变量,递减引用计数,并从 符号表。因为引用计数现在为零,垃圾收集器 知道没有办法访问这个 zval,并且可以释放 它占用的内存。

现在我尝试了以下代码:

<?php
    $x = 12345;
    unset($x);
    echo gettype($x);
?>

我得到的输出很奇怪,我得到一个错误,说变量是未定义的(这与我发布的第二个引用一致),但我也得到了变量的类型是 NULL(这符合我发布的第一条报价):

为什么我得到这个奇怪的输出?

【问题讨论】:

  • 因为你没有设置变量意味着它被完全销毁了。

标签: php


【解决方案1】:

unset() 销毁指定的变量。

它不会使变量 NULL 所以警告绝对有意义

 Notice: Undefined variable: x 

参考:http://php.net/manual/en/function.unset.php

【讨论】:

  • 文档说如果我在一个变量上调用unset(),该变量将变为NULL。文档有错吗?
  • 哪里写着the variable will become NULL ?
【解决方案2】:

unset() 销毁指定的变量。请注意,在 PHP 3 中,unset() 将始终返回 TRUE(实际上是整数值 1)。然而,在PHP 4 中,unset() 不再是一个真正的函数:它现在是一个语句。因此不返回任何值,并且尝试获取 unset() 的值会导致 解析错误

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 2015-12-29
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多