将对象/引用作为函数参数传递

时间:2009-12-09 17:18:09

标签: php function object reference parameters

编辑:语言是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;
    }

1 个答案:

答案 0 :(得分:0)

  

如何从对象引用中访问长字符串?它适用于短字符串,但像长文件一样只返回空。

你正在咆哮错误的树。顺便说一下,你不需要那个&一点都不没有它的对象通过引用传递(不是在PHP 4中,但你现在不应该使用它。)