关于pear的问题

caven 2003-04-10 03:57:01
<?
require_once "PEAR.php";
class Cla extends PEAR
{
var $end1=1;
function Cla()
{
$this->PEAR();
}
function func()
{
$this->end1=6;
}
function _Cla()
{
$this->_PEAR();
echo "aaaaaaaa";
echo $this->end1;//应该输出 6,但是输出 1,
}

}
$a=new Cla();
$a->func();
?>
我看了pear.php代码,把Pear::Pear中代码
$_PEAR_destructor_object_list[] = &$this 换成
$_PEAR_destructor_object_list[] = &$a
输出正常(把pear.php拷过来,对$a global引用)
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
caven 2003-04-11
  • 打赏
  • 举报
回复
xuzuning(唠叨) 佩服
xuzuning 2003-04-11
  • 打赏
  • 举报
回复
再来谈谈看法。
首先 $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!
caven 2003-04-11
  • 打赏
  • 举报
回复
分不够再加
caven 2003-04-10
  • 打赏
  • 举报
回复
父类的析构函数没有释放对象,只是检查是否出错的,要不要没关系,php不能释放对象的内存资源的,
在$a->func();后写上echo $a->end1输出 6
在 _Cla() 中$this->end1 却是 1,func()绝对比 _Cla()先运行,_Cla()绝对运行了
wingoffire 2003-04-10
  • 打赏
  • 举报
回复
你已经调用了父类的析构函数,,试试看把$this->_PEAR(); 放到最后
其实你等于在把原来的类释放掉以后又生成了一个新的类,我觉得问题可能出在这里
caven 2003-04-10
  • 打赏
  • 举报
回复
$this->end1=6;只是手误 ,我本来是$this->end1的。我要问的就是pear中析构函数的问题,没有认真研究过pear是不能回答这个问题的,要么我的软件包有问题,要么pear bug
xuzuning 2003-04-10
  • 打赏
  • 举报
回复
没有认真研究过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

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧