Что означает эта подпись (&) в PHP? - PullRequest
8 голосов
/ 19 марта 2010

Рассмотрим:

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

Почему &?

Ответы [ 3 ]

11 голосов
/ 19 марта 2010

В синтаксисе 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, и ссылки не должны использоваться для этой цели.

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

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

By Rithiur

11 голосов
/ 19 марта 2010

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

Возвращение ссылок в PHP

0 голосов
/ 19 марта 2010

Передача PHP метасимволом ссылки. См. Передача по ссылке

...