web-dev-qa-db-fra.com

PHP = & opérateur

Ces deux instructions PHP font-elles la même chose?:

$o =& $thing;

$o = &$thing;
45
Kev

Oui, ce sont exactement les mêmes choses. Ils prennent simplement la référence de l'objet et le référencent dans la variable $o. Veuillez noter que thing doit être une variable.

38
judda

Ce n'est pas la même chose, syntaxiquement parlant. L'opérateur est l'atomique = & et cela compte vraiment. Par exemple, vous ne pouvez pas utiliser l'opérateur = & dans une expression ternaire. Aucune des syntaxes suivantes n'est valide:

$f = isset($field[0]) ? &$field[0] : &$field;
$f =& isset($field[0]) ? $field[0] : $field;

Donc, à la place, vous utiliseriez ceci:

isset($field[0]) ? $f =& $field[0] : $f =& $field;
27
Scott Lahteine

Ils donnent tous deux une erreur T_PAAMAYIM_NEKUDOTAYIM attendue.

Si vous vouliez dire $o = &$thing; alors qui assigne la référence de chose à o. Voici un exemple:

$thing = "foo";

$o = &$thing;

echo $o; // echos foo

$thing = "bar";

echo $o; // echos bar
13
Rich Bradshaw

La différence est très importante:

<?php
$a = "exists";
$b = $a;
$c =& $a;
echo "a=".$a.", b=".$b.", c=".$c."<br/>"; //a=exists b=exists c=exists

$a = null;
echo "a=".$a.", b=".$b.", c=".$c; //a= b=exists c= 
?>

La variable $ c meurt lorsque $ a devient NULL, mais la variable $ b conserve sa valeur.

12
bbe

Oui, ils le font. $o deviendra une référence à thing dans les deux cas (je suppose que thing n'est pas une constante, mais en fait quelque chose de significatif en tant que variable).

1
Emil Vikström

Si vous vouliez dire thing avec un $ devant eux, alors oui, les deux sont assignés par référence. Vous pouvez en savoir plus sur les références dans PHP ici: http://www.php.net/manual/en/language.references.whatdo.php