PHP &$string — что это значит?

Я гуглил, но ничего не нашел.

$x->func(&$string, $str1=false, $str2=false);

что делает & перед $string &$string?


person Mickey    schedule 06.12.2013    source источник
comment
Кто бы ни отметил это как дубликат: в настоящее время это НЕПРАВИЛЬНО ... этот вопрос НЕ является дубликатом, поскольку комбинация символов & $ НЕ отображается в так называемом указанном вопросе. Пожалуйста, проявляйте больше осторожности и внимания, отмечая вопросы как дубликаты.   -  person mike rodent    schedule 28.03.2015
comment
Майк прав. На него не ответили, по крайней мере, на указанной странице. Такие ответы безответственны. Они должны быть запрещены, а лица, их производящие, должны быть понижены в должности.   -  person Apostolos    schedule 09.04.2017


Ответы (5)


Вы назначаете это значение массива по ссылке.

передача аргумента через ссылку (&$) и $ заключается в том, что когда вы передаете аргумент через ссылку, вы работаете с исходной переменной, это означает, что если вы измените ее внутри своей функции, она будет изменена и за ее пределами, если вы передадите аргумент как копировать, функция создает копию экземпляра этой переменной и работает с этой копией, поэтому, если вы измените ее в функции, она не будет изменена вне ее.

Ссылка: http://www.php.net/manual/en/language.references.pass.php

person Krish R    schedule 06.12.2013
comment
простое объяснение, спасибо - person Mickey; 06.12.2013
comment
Ваша ссылка на документацию относится к связанной, но другой теме. - person Rob Baillie; 06.12.2013
comment
@Rob Baillie, спасибо, я обновил ссылку. - person Krish R; 06.12.2013

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

В этой ситуации, если функция изменит значение параметра, то изменится и значение переданной переменной.

Тем не менее, вы должны иметь в виду следующее для PHP 5:

  • Ссылка на время вызова (как вы показали в своем примере) устарела с версии 5.3.
  • Передача по ссылке, если она указана в сигнатуре функции, не устарела, но больше не требуется для объектов, поскольку теперь все объекты передаются по ссылке.

Дополнительную информацию можно найти здесь: http://www.php.net/manual/en/language.references.pass.php

И здесь много информации: Reference — Что делает этот символ означает в PHP?

Пример поведения строк:

function changeString( &$sTest1, $sTest2, $sTest3 ) {
    $sTest1 = 'changed';
    $sTest2 = 'changed';
    $sTest3 = 'changed';
}

$sOuterTest1 = 'original';
$sOuterTest2 = 'original';
$sOuterTest3 = 'original';

changeString( $sOuterTest1, $sOuterTest2, &$sOuterTest3 );

echo( "sOuterTest1 is $sOuterTest1\r\n" );
echo( "sOuterTest2 is $sOuterTest2\r\n" );
echo( "sOuterTest3 is $sOuterTest3\r\n" );

Выходы:

C:\test>php test.php

sOuterTest1 is changed
sOuterTest2 is original
sOuterTest3 is changed
person Rob Baillie    schedule 06.12.2013

& означает передачу по ссылке:

Ссылки позволяют двум переменным ссылаться на один и тот же контент. Другими словами, переменная указывает на свое содержимое (а не становится этим содержимым). Передача по ссылке позволяет двум переменным указывать на одно и то же содержимое под разными именами. Амперсанд (&) ставится перед переменной, на которую делается ссылка.

person LightningBoltϟ    schedule 06.12.2013

Это означает, что вы передаете ссылку на строку в метод. Все изменения, внесенные в строку в методе, будут отражены также за пределами этого метода в вашем коде.

См. также: PHP =& оператор

Пример:

$string = "test";
$x->func(&$string); // inside: $string = "test2";
echo $string; // test2

без оператора & вы все равно увидите «тест» в своей переменной.

person eX0du5    schedule 06.12.2013
comment
Забавно, что вы упомянули об этом =&, я только сегодня увидел и узнал, что это такое, я программировал годами и никогда раньше этим не пользовался. - person Mickey; 06.12.2013
comment
Я также кодировал php в течение многих лет, но редко использовал его. В большинстве случаев вы передаете объекты и в этом нет необходимости. - person eX0du5; 06.12.2013

& — передать по ссылке. Он передается по ссылке вместо строкового значения.

person user3069029    schedule 06.12.2013