编辑:语言是PHP。 所以,我正在实现一个监听器/观察者模式。我实现的一个对象是包含文件的对象。其工作原理如下:
class IncludeEvent extends Event {
protected $File = '';
public $Contents;
....
public function Begin() {
....
// this is the ONLY time $Contents is modified:
$this->Contents = ob_get_contents();
ob_end_clean();
....
}
....
if ($this->Notify(new IncludeObject($this->File,'OBOutput', $this)) !== false) {
print $this->Contents;
}
}
现在,只要某个对象想要向其侦听器发出事件发生的信号,就需要使用Notify功能。
所以有一次我必须向对象的监听器发送对象的引用,这样他们就可以访问包含的内容($Contents
)。
所以我使用Notify()
传递$this
作为参数。当我尝试从另一个对象访问$Content
时,它只返回一个空字符串。
注意:对象在正常上下文中的功能应该,只有当我将其作为函数参数传递时,我才能访问其$ Content。
IncludeObject()
的构造函数:
public function __construct($F= '', $M= -1, &$IV = null) {
$this->File = $F;
$this->Func = $M;
$this->IncEv = $IV;
}
侦听器访问IncludeEvent对象,如下所示:
public function OBOutput($IncObj){
print $IncObj->IncEv->Contents;
return false;
}
所以是的,如何从对象引用中访问长字符串?它适用于短字符串,但像长文件一样只返回空。
Notify()定义为:
final public function Notify($EvObj = null) {
foreach ($this->listen_list as $z) {
$d = call_user_func(array($z, $EvObj->Func), $EvObj);
if ($d == true || is_null($d)) {
return true;
}
}
return false;
}
答案 0 :(得分:0)
你正在咆哮错误的树。顺便说一下,你不需要那个&一点都不没有它的对象通过引用传递(不是在PHP 4中,但你现在不应该使用它。)如何从对象引用中访问长字符串?它适用于短字符串,但像长文件一样只返回空。