没有认真研究过pear,但你的代码有点问题:
1、function  func()
    {
        $this->$end1=6; // 应为$this->end1=6; 不过与输出无关
    }2、_Cla()已是仿析构函数了,在这里输出似不妥当。
应增加一方法:
    function show() {
        echo     $this->end1;
    }
    
这样:
 $a=new Cla();
 $a->func();
 $a->show(); // out 6

解决方案 »

  1.   

    $this->end1=6;只是手误  ,我本来是$this->end1的。我要问的就是pear中析构函数的问题,没有认真研究过pear是不能回答这个问题的,要么我的软件包有问题,要么pear bug
      

  2.   

    你已经调用了父类的析构函数,,试试看把$this->_PEAR();  放到最后
    其实你等于在把原来的类释放掉以后又生成了一个新的类,我觉得问题可能出在这里
      

  3.   

    父类的析构函数没有释放对象,只是检查是否出错的,要不要没关系,php不能释放对象的内存资源的,
    在$a->func();后写上echo $a->end1输出 6
    在   _Cla()  中$this->end1 却是 1,func()绝对比   _Cla()先运行,_Cla()绝对运行了
      

  4.   

    再来谈谈看法。
    首先 $a = new Cla();
    操作符 new 将产生一个对象,保存于$_PEAR_destructor_object_list中。
    ...
    $_PEAR_destructor_object_list[] = &$this;
    ...
    而操作符 = 将其“值”赋予变量$a,于是在$a中保存有类的副本。他与$_PEAR_destructor_object_list中保存的对象是独立的。任何对$a的改变,都不影响$_PEAR_destructor_object_list的内容。这一点你可以在代码中插入print_r($_PEAR_destructor_object_list);来看到。所以,如需达到你的要求。需要采用传址的方式。
    $a =& new Cla();一切OK!