我有一个看起来像这样的事件对象:
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 方法的类。将
setInput
方法添加到InputEvent
,但仍然不如将其分配给Listener
上面示例中的值那么优雅。