<?phpfunction &get_instance_ref() { 
    static $obj;     echo 'Static object: '; 
    var_dump($obj); 
    if (!isset($obj)) { 
        // 将一个引用赋值给静态变量 
        $obj = &new stdclass; 
    } 
    $obj->property++; 
    return $obj; 
} function &get_instance_noref() { 
    static $obj;     echo 'Static object: '; 
    var_dump($obj); 
    if (!isset($obj)) { 
        // 将一个对象赋值给静态变量 
        $obj = new stdclass; 
    } 
    $obj->property++; 
    return $obj; 
} $obj1 = get_instance_ref(); 
$still_obj1 = get_instance_ref(); 
echo "\n"; 
$obj2 = get_instance_noref(); 
$still_obj2 = get_instance_noref(); 
?> Static object: NULL
Static object: NULLStatic object: NULL
Static object: object(stdClass)(1) {
["property"]=>
int(1)
}各位帮帮忙 解读一下代码
希望能写上注释结果如何得出的!
为什么会有这样的结果!
谢谢了

解决方案 »

  1.   


    <?php function &get_instance_ref() { 
        static $obj;     echo 'Static object: '; 
        var_dump($obj); 
        if (!isset($obj)) { 
            // 将一个引用赋值给静态变量 
            $obj = &new stdclass;  //修改通过这个方法返回的变量,将同时改变对象本身
        } 
        $obj->property++;  //楼主好像没有吧property属性列出来,并且这个应该放在上面的IF里
        return $obj; 
    } function &get_instance_noref() { 
        static $obj;     echo 'Static object: '; 
        var_dump($obj); 
        if (!isset($obj)) { 
            // 将一个对象赋值给静态变量 
            $obj = new stdclass;  //没有带&
        } 
        $obj->property++; 
        return $obj;  //返回实例,因为生成实例时没有用&符
    } //综合感受:楼主的代码(函数)是单独调用的,这样好像不是面向对象中的方式吧。这些函数应该是定义在某个类中的吧
    //还有就是代码没有给完整,有的不好看
    $obj1 = get_instance_ref(); 
    $still_obj1 = get_instance_ref(); 
    echo "\n"; 
    $obj2 = get_instance_noref(); 
    $still_obj2 = get_instance_noref(); 
    ?> 
      

  2.   

    大哥 这是PHP5 手册中的代码
    不是 我自己写的!晕死了
      

  3.   

    晕死!PHP手册
    变量 变量范围
    全局和静态变量的引用!
    真 服了你了!
      

  4.   

    这两段代码的根本区别在于,第一段代码是传址,第二段代码是引用.
    由于第一段代码中,  new stdclass产生的是一个临时的对象实例,生存周期只在函数内部,所以传址是错误的.
      

  5.   

    变量就像一个房间, 现在房间有一个女人传值 : 你把女人抓回家了~在家就能找到他
    引用 : 你每次都要去那房间才能找到那个女人Function 内的房间是临时的, 用完后就会清拆掉传值 : 女人在你家, 你还是能找到她 (有值)
    引用 : 房间拆掉了, 女人不知道跑那去了, 你再也找不到 (NULL)