没有认真研究过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、function func()
{
$this->$end1=6; // 应为$this->end1=6; 不过与输出无关
}2、_Cla()已是仿析构函数了,在这里输出似不妥当。
应增加一方法:
function show() {
echo $this->end1;
}
这样:
$a=new Cla();
$a->func();
$a->show(); // out 6
其实你等于在把原来的类释放掉以后又生成了一个新的类,我觉得问题可能出在这里
在$a->func();后写上echo $a->end1输出 6
在 _Cla() 中$this->end1 却是 1,func()绝对比 _Cla()先运行,_Cla()绝对运行了
首先 $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!