我有一个如下所示的事件对象:
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
类,该类仅保存 value 和 getter、setter 方法。向
InputEvent
添加setInput
方法,但仍然不如将其分配给Listener
中的值那么优雅上面的例子。
最佳答案
正如上面提到的 Moonwave99,您需要使用 setter。在您的 InputEvent 类中添加方法:
public function setInput(&$s) {
$this->input = $s;
}
或者您可以返回一个引用:
public function &getInputRef() {
return $this->input;
}
$input = &$event->getInputRef();
我认为应该起到同样的作用。
关于php - 返回对象属性引用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822993/