$dbginfo = array();
if ($dbginfo == NULL) {
$dbginfo['null'] = 'true';
}为啥最后会有 'null' => 'true' 的这个映射? array() 等同于 NULL 么?

解决方案 »

  1.   

    不耻下问好东东啊~~为啥最后会有 'null' => 'true' 的这个映射?
    写这代码的人无聊~
    array的key只是个字符,你喜欢写什么就什么,是字符或正整数就行了
     array() 等同于 NULL 么?
    隐式转换,NULL被转为了array
      

  2.   

            if ($dbginfo == NULL) { <=== 这个NULL是空值,这里是判断数组$dbginfo是否为空
                $dbginfo['null'] = 'true'; <=== 这个'null'是键名,所以用引号括起
            }
      

  3.   


    关键是,第一句已经给 $dbginfo 赋值 = array() 了。难道 array() == NULL ?
      

  4.   

    说白了,就是$dbginfo['null'] = true,null是数组里的一个键名了
      

  5.   

    楼主应该捧着一颗谦恭的心,去请教我们的PHP高手点点同学
      

  6.   

    这个问题是要注意,以前吃过一次亏
    $arr = array();
    echo $arr == NULL ;//true
    echo $arr === NULL;//false
    手册提供的信息也不清晰
    A variable is considered to be null if: it has been assigned the constant NULL. it has not been set to any value yet. it has been unset(). 
    貌似要通过读php的C源码探个究竟了.
      

  7.   

    存储php变量的结构体如下
    typedef struct _zval_struct {
        zvalue_value value;
        zend_uint refcount;
        zend_uchar type;
        zend_uchar is_ref;
     } zval;
    怀疑$arr = array();这一句把value设置NULL,type设置为array.
      

  8.   


    $arr = array();
    $str = "";
    echo $arr == NULL ? "array == NULL" : "array";
    echo $str == NULL ? "string == NULL" : "string";;试了下,两个都是为 true。
      

  9.   

    嗯,我觉得重点是这个
    it has not been set to any value yet. $arr = array();//getType($arr) 为 array

    $arr = "";//getType($arr) 为 string
    在解释器看来,可能都属于未设置'值'的情况,即结构体中的value未设置或为null,但是确实容易使人犯错.
      

  10.   


    暂时理解为 php 的 "by-design feature" 好了。谢谢。:)