Что означает эта подпись (&) в PHP?

Рассмотрим:

public function & get($name, $default = null)

Почему &?

Ответ 1

В синтаксисе PHP это означает, что функция возвращает ссылку вместо значения. Например:

<?php
    $foo = 'foo';

    function & get_foo_ref ()
    {
        global $foo;
        return $foo;
    }

    // Get the reference to variable $foo stored into $bar
    $bar = & get_foo_ref();
    $bar = 'bar';

    echo $foo; // Outputs 'bar', since $bar references to $foo.
?>

В приведенном выше примере удаление & из объявления функции приведет к тому, что переменная $foo все еще будет содержать "foo", поскольку из функции было возвращено только значение, а не ссылка.

Это чаще всего использовалось в PHP4, поскольку оно не передавало объекты по их ссылке и клонировало их. Из-за этого объектные переменные должны были передаваться по ссылке, чтобы избежать нежелательного клонирования. Это больше не относится к PHP5, и ссылки не должны использоваться для этой цели.

Однако функции, возвращающие ссылки, также не являются абсолютно бесполезными (или плохая практика, когда они не используются для замены ссылок на объекты).

Например, лично я использовал их при создании script, который передает "путь" к функции, которая возвращает ссылку на переменную в этом пути, позволяя мне установить значение для нее и прочитать значение. Из-за рекурсивного характера функции возвращалась эта ссылка.

rithiur

Ответ 2

Это означает, что он возвращает ссылку на результат, а не его копию.

Возврат ссылок в PHP