Практическое использование добавления амперсанда к переменным PHP - PullRequest
2 голосов
/ 24 мая 2011

Я знаю, что добавление '&' к вашей переменной PHP устанавливает ссылку на исходную переменную вместо копирования ее значения следующим образом:

$original = 'apples';
$secondary = &$original;
$original = 'oranges';

echo $secondary; // 'oranges'

Если это работает таким образом, почему бы просто не использоватьисходная переменная тогда?

Ответы [ 5 ]

2 голосов
/ 24 мая 2011

Передача по ссылке полезна и необходима при передаче переменной в качестве параметра функции, ожидая, что эта переменная будет изменена без копирования в памяти. Например, многие нативные функции PHP array_*() работают с ссылками на массивы.

Эта функция, например, получает ссылку на массив и добавляет элемент в исходный массив. Если бы это было сделано без ссылки &, в области действия функции была бы создана новая копия массива. Затем он должен быть возвращен и переназначен для использования.

function add_to_an_array(&$array)
{
  // Append a value to the array
  $array[] = 'another value';
}

$array = array('one', 'two', 'three');
add_to_an_array($array);

print_r($array);

Array
(
  [0] => one
  [1] => two
  [2] => three
  [3] => another value
)
1 голос
/ 24 мая 2011

Передача по ссылке действительно является копом и идет вразрез с хорошей инкапсуляцией.Если вам нужно манипулировать переменной таким образом, она, вероятно, должна принадлежать классу как переменная-член и затем не должна передаваться в функцию.Хороший ОО-дизайн обычно делает переменные-члены неизменяемыми с помощью ключевого слова «final», но в PHP этого нет.Не является интуитивно понятным, что передача переменной в функцию может изменить ее значение, поэтому ее следует избегать в большинстве случаев.

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

1 голос
/ 24 мая 2011
$original = 'apples';

function foo($word) {
    $word = 'oranges';
}

foo($original);
echo $original; // apples, because only local $word was changed, not $original.

foo(&$original);
echo $original; // oranges, because $original and $word are the same
0 голосов
/ 24 мая 2011

Более интересное использование - когда он используется в формальном аргументе функции

Foo ($ а);

...

function foo (& $ a) { .... }

это позволяет вам изменить функцию в.

0 голосов
/ 24 мая 2011

Существует много вариантов использования ссылок.

  • Вы можете передать ссылку на переменную в функцию, чтобы вы могли изменить значение внутри функции
  • Вы можете использовать ссылки насоздавать связанные списки

и т.д ...

Просто имейте в виду, что они есть, и вы обязательно найдете для них приложение, когда придет время, и вы столкнетесь спроблема, которая может быть решена с помощью ссылок.

Ознакомьтесь со следующей статьей для других идей и использования ссылок: http://www.elated.com/articles/php-references/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...