Возврат по ссылке полезен, когда вы хотите использовать функцию, чтобы найти, к какой переменной должна быть привязана ссылка. Не используйте возврат по ссылке для повышения производительности. Движок автоматически оптимизирует это самостоятельно. Возвращайте ссылки только тогда, когда у вас есть веская техническая причина для этого. Чтобы вернуть ссылки, используйте этот синтаксис:
<?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.
?>
В этом примере будет установлено свойство объекта, возвращаемого функцией getValue , а не копия, как это было бы без использования ссылочного синтаксиса.
Примечание . В отличие от передачи параметров, здесь вы должны использовать в обоих местах — чтобы указать, что вы хотите вернуть по ссылке, а не по копии, и чтобы указать, что для $myValue
&
должна выполняться привязка ссылки, а не обычное присваивание .
Примечание . Если вы попытаетесь вернуть ссылку из функции с синтаксисом:
return ($this->value);
это не сработает, так как вы пытаетесь вернуть результат выражения , а не переменную по ссылке. Вы можете возвращать переменные только по ссылке из функции и ничего больше.
Чтобы использовать возвращенную ссылку, вы должны использовать присваивание ссылки:
<?php
function &collector() {
static $collection = array();
return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Чтобы передать возвращенную ссылку другой функции, ожидающей ссылку, вы можете использовать этот синтаксис:
<?php
function &collector() {
static $collection = array();
return $collection;
}
array_push(collector(), 'foo');
?>
Примечание . Обратите внимание, что
array_push(&collector(), 'foo');
это не сработает, это приведет к фатальной ошибке.
0 комментариев