本帖最后由 generalxu 于 2010-10-27 15:28:23 编辑

解决方案 »

  1.   

    如果用另一段更简单的类来验证: class Test_s
    {
    public $k=0;
    }
    $test_s1=new Test_s();
    $test_s2=$test_s1;

    echo "test_s1:".$test_s1->k."<br />";
    echo "test_s2:".$test_s2->k."<br />";
    $test_s1->k++;
    echo "test_s1:".$test_s1->k."<br />";
    echo "test_s2:".$test_s2->k."<br />";显示的是:
    test_s1:0
    test_s2:0
    test_s1:1
    test_s2:1
    还是说明两个变量指向同一内存的。
      

  2.   

    首先 是否指向同一内存 的说法是欠妥的
    php 与编译型的语言不一样,变量并不直接存放于内存中。而是存放在由php引擎维护的一张表中所以 php 就没有了操作内存的“指针”,而是功能相似的“引用”
    $b =& $a;
    就是引用,他表示 $b 和 $a 共用一个变量表项的数据区在 php5 以前,对象和普通变量没有区别
    而到了 php5 情况就有点变化了:所有对象都是以“引用”方式传递的
    class Test_s
    {
      public $k=0;
    }function foo($o) {
      $o->k++;
    }$test_s1 = new Test_s();
    echo $test_s1->k , '<br />';//0foo($test_s1);
    echo $test_s1->k , '<br />';//1
      

  3.   

    这个是正确的http://docs.php.net/manual/zh/language.oop5.references.php在php中,引用只是一个别名,不是指针。new 对象时,自动返回引用。
      

  4.   

    PHP对象与变量处理方式是不同的。$b=$a;//$a=new Cls_1(); $b保存$a 的标号(以此来查找对象实际数据)的一个副本,指向同一处实际数据
    $b=&$a;//$a=new Cls_1(); $b为$a的一个引用,效果同上$b=$a;//$a=10;  $b保存$a的一个副本,变量赋值后二者无关系
    $b=&$a;//$a=10;  $b为$a的一个引用,二者指向同一处实际数据