函数返回对象属性的引用

时间:2013-02-11 23:37:47

标签: php reference

我有一个如下所示的事件对象:

class InputEvent
{
    protected $input;

    public function __construct(&$input)
    {
        $this->input = &$input;
    }

    public function getInput()
    {
         return $this->input;
    }
}

现在,由于$input是一个字符串,我必须通过引用传递它。但是,当我创建事件侦听器时,输入值不会更改,因为getInput函数返回$input值而不是引用$input属性。

class Listener
{
    public function myEvent(InputEvent $event)
    {
         $input = $event->getInput();

         // doesn't change InputEvent::input property
         $input = "asd";
    }
}

有没有办法让我返回对$input值的引用,以便在事件对象中更改它?

我可以做两个解决方法,但两个都是......好吧,解决方法,不是很漂亮。

  1. $input包装到一个类中,例如创建一个String类,它只能保存值和getter,setter方法。

  2. setInput方法添加到InputEvent,但仍然不如将其分配给上述Listener示例中的值那样优雅。

3 个答案:

答案 0 :(得分:1)

正如上面提到的moonwave99,你需要使用一个setter。在InputEvent类中添加方法:

public function setInput(&$s) {
    $this->input = $s;
}

或者您可以返回参考:

public function &getInputRef() {
    return $this->input;
}
$input = &$event->getInputRef();

我认为应该这样做。

答案 1 :(得分:0)

让你的getInput函数按引用返回

function &getInput()
         ^-- signifies return value by reference

答案 2 :(得分:0)

class InputEvent
{
    protected $input;

    public function __construct(&$input)
    {
        $this->input = $input;
    }

    public function &getInput()
    {
        return $this->input;
    }
}
$string = "abc";
$a = new InputEvent($string);

$input = &$a->getInput();

$input .= "def";

echo $a->getInput();
相关问题