web-dev-qa-db-fra.com

Opérateur d'affectation de référence en PHP, = &

Que fait le =& (égal-esperluette) opérateur d'affectation faire en PHP?

Est-il obsolète?

89
Kyle J. Dye

Ce n'est pas obsolète et il est peu probable qu'il le soit. C'est le moyen standard, par exemple, de faire partie d'un tableau ou des modifications du miroir d'objets apportées à un autre, au lieu de copier les données existantes.

On l'appelle affectation par référence , qui, pour citer le manuel, "signifie que les deux variables finissent par pointer vers les mêmes données, et rien est copié n'importe où " .

La seule chose qui est déconseillée avec =& est "assigner le résultat de new par référence" dans PHP 5 , ce qui pourrait être la source de toute confusion. new est automatiquement affecté par référence, donc & est redondant/déconseillé dans$o = &new C;, mais pas dans $o = &$c;.


Comme il est difficile de rechercher, notez que =& ( est égal à l'esperluette) est identique à = & ( est égal à l'esperluette spatiale) et est souvent écrit de telle sorte qu'il s'exécute dans l'autre variable comme $x = &$y['z']; ou $x = &$someVar ( nom de la variable du signe dollar et commercial). Exemple simplifié à partir des documents:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

Voici un lien pratique vers un section détaillée sur Assigner par référence dans le manuel PHP PHP Cette page fait partie d'une série de références - cela vaut la peine de prendre une minute pour lire toute la série.

107
user568458

Ce sont deux opérateurs différents. = est une affectation comme vous le savez probablement. Et & signifie que la variable doit être accessible par référence plutôt que par valeur.

25
Asaph
$x = &$y['z'];

a également pour effet de créer $y['z'] s'il n'existe pas et en le définissant sur null.

Cela empêche les messages d'erreur que vous auriez pu vouloir lire. Je n'ai pas encore trouvé de documentation à ce sujet; peut-être nouveau en 5.3, pour autant que je sache.

5
malcanso