我有一个如下所示的事件对象:
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
值的引用,以便在事件对象中更改它?
我可以做两个解决方法,但两个都是......好吧,解决方法,不是很漂亮。
将$input
包装到一个类中,例如创建一个String
类,它只能保存值和getter,setter方法。
将setInput
方法添加到InputEvent
,但仍然不如将其分配给上述Listener
示例中的值那样优雅。
答案 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();