Ces deux instructions PHP font-elles la même chose?:
$o =& $thing;
$o = &$thing;
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.
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;
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
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.
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).
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