调用unset()后输出奇怪的输出

时间:2018-03-15 05:30:48

标签: php

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

  

如果出现以下情况,则认为变量为空

     

已为其分配常量NULL。

     

它尚未设置为任何值。

     

一直未设置()。

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

  

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

现在我尝试了以下代码:

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

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

enter image description here

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

2 个答案:

答案 0 :(得分:2)

  

unset()会破坏指定的变量。

它不会使变量 NULL 因此警告绝对有意义

 Notice: Undefined variable: x 

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

答案 1 :(得分:1)

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