Есть ли реальная разница между двумя способами получения значения по ссылке?
Способ 1
<?php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue();
// $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;
// prints the new value of $obj->value, i.e. 2.
?>
Способ 2
<?php
class foo {
public $value = 42;
public function getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->value;
$obj->value = 2;
echo $myValue;
?>
В обоих случаях 2 печатается. Так зачем нужен GetValue () функция тогда? Первый пример взят из Руководство по PHP.
Вам нужен первый подход, если у полей класса нет модификатора public. В этом случае вы не можете получить ссылку на поле за пределами класса. Смотрите пример:
<?php
class foo
{
protected $value = 1;
public function setValue($value)
{
$this->value = $value;
}
public function &getValue()
{
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue();
$obj->setValue(2);
echo $myValue;
?>
Других решений пока нет …