$obj = &new stdclass;
这个应该存在语法错误,你可以在他的后面直接var_dump一下,$obj应该仍旧是null。
最起码,对于static成员来说,达不到预期的效果。static $obj是静态成员,在一次被定义之后就会留在内存中,跟global类似,但是,变量的访问范围别受到限制。

解决方案 »

  1.   

    其实这个和你上面的遇到的问题是一样的,
    &是传址,=是引用.
    有人分析了,global和static在这种情况下都会发生未可预料的结果,呵呵.
      

  2.   

    $obj = &new stdclass;
    可以这样理解 new stdclass这个地址的生存周期就在函数内部,一旦离开了这个函数,new stdclass被销毁,所以这个地址当然也就不存在了.
      

  3.   

    那这个又怎么理解呢?
    static $obj;
    if (!isset($obj)) {
        // 将一个对象赋值给静态变量
        $obj = new stdclass;
    }
    $obj->property++;
    return $obj;
      

  4.   

    $obj = new stdclass;
    这是一个引用.
    相当于对new stdclass;的一个克隆。
    由于$obj是static变量,它的生命周期在这个函数内部.当下一次再调用这个函数时,这个仍然存在.
      

  5.   

    static $obj;
    特殊制定的变量,超出范围后不销毁,再次使用时保持前值。 
    作用域:当前文件的当前函数。
      

  6.   

    感觉你的解释自相矛盾。
    我的理解,由于以下步骤导致$obj为NULL:
    static $obj;
    $obj = &new stdclass;
    1.new stdclass之后,生成了一个新的stdclass实现。这个实现在get_instance_ref中,而且,生存周期跟get_instance_ref的调用相同。
    2.$obj = &new stdclass之后,stdclass实现的间接地址被带入到$obj
    3.第二次调用get_instance_ref的时候,通过$obj提取步骤2中带入的地址,但是,1中的stdclass实现意境随着get_instance_ref的第一次调用而消失,所以返回结果为null
    static $obj;
    $obj = new stdclass;
    1.new stdclass之后,生成了一个新的stdclass实现。
    2.$obj = &new stdclass之后,stdclass实现的相对地址被带入到$obj
    3.第二次调用get_instance_ref的时候,通过$obj提取步骤2中带入的地址,虽然get_instance_noref的第一次被调用的成员已经消失,但是,1中的stdclass实现和其地址仍旧在$obj,所以返回结果为stdclass实现。
    这里所说的相对地址,可以片面的理解为绝对地址。
      

  7.   


    static $obj; 
    $obj = new stdclass;
    1.new stdclass之后,生成了一个新的stdclass实现。
    2.$obj = new stdclass之后,stdclass实现的相对地址被带入到$obj
    3.第二次调用get_instance_ref的时候,通过$obj提取步骤2中带入的地址,虽然get_instance_noref的第一次被调用的成员已经消失,但是,1中的stdclass实现和其地址仍旧在$obj,所以返回结果为stdclass实现。
    这里所说的相对地址,可以片面的理解为绝对地址。