Ce qui ne l' “=&” et “&=” opérateurs en PHP veux dire?
Quoi "=&" /"&=" opérateurs en PHP veux dire? Où puis-je trouver des informations sur eux?
Recherche Google n'aide pas.
Vous devez vous connecter pour publier un commentaire.
Quoi "=&" /"&=" opérateurs en PHP veux dire? Où puis-je trouver des informations sur eux?
Recherche Google n'aide pas.
Vous devez vous connecter pour publier un commentaire.
$a &= $b
est court pour$a = $a & $b
qui est le au niveau du bit et opérateur.$a =& $b
attribue $a un référence à $b.=&
de l'opérateur. C'est une combinaison de=
(affectation) et unaires&
(référencement) des opérateurs.$a =& $b
attribue $a une référence à $b" est fausse, puisque $a n'est pas le point de $b (ou vice versa), mais pointent vers le même endroit. Une subtile, mais importante différence.$a =& $b
littéralement attribue$a
comme une référence à$b
. Si la valeur de$a
est modifié, la valeur de$b
va changer. Cela diffère de la "les deux pointant vers le même endroit" quand il s'agit d'objets: j'ai pu faire$a = $b = new AnObject()
, et les deux variables pointent vers le même endroit; toutefois, la modification de l'emplacement de l'un des points à ne changerait pas où les autres points. C'est,$a = null
ne ferait pas$b = null
, alors qu'avec=&
, il le ferait.&
est sensible au contexte. Vous avez raison en ce que=&
n'est pas un opérateur unique; au contraire,&
est un opérateur lorsqu'il est précédé par=
, avec les espaces autorisés. Ou peut-être que vous pourriez dire que&
modifie le=
de l'opérateur.=&
$a =& $b
tourne$a
dans un alias pour$b
. Si la valeur de référence ou de$a
est modifié, la valeur de référence ou de$b
sera modifié en conséquence.Cela diffère de la "les deux pointant vers le même endroit" quand il s'agit d'objets: j'ai pu faire
$c = $d = new AnObject(
), et les deux variables pointent vers le même endroit; toutefois, la modification de l'emplacement de l'un des points ne changerait pas où les autres points. C'est,$c = null
ne ferait pas$d = null
. Dans le cas de$a =& $b
, cependant,$a = null
ferait$b = null
.Remarque: Officiellement, les alias sont en fait appelées références. La terminologie officielle est un peu un abus de langage et est certainement l'ambigu, j'ai donc choisi d'utiliser le terme "alias" à la place. Pour en savoir plus, consultez php.net.
Utilisations et les effets
Avec des valeurs scalaires,
=&
est un peu comme emballage de la valeur à un objet, de sorte que vous pouvez changer la valeur universellement entre plusieurs variables. Avec des types qui sont normalement passés par référence (objets de),=&
fournit une référence à une référence.J'ai tendance à utiliser
=&
quand je travaille avec des tableaux associatifs. Plutôt que de réécrire$foo['bar']['foobar']
à plusieurs reprises, je peux créer un alias:$foobar =& $foo['bar']['foobar']
. Ces fonctionne même si l'index n'existe pas encore. Si$foo['bar']['foobar']
n'existe pas, alorsisset($foobar)
sera fausse. C'est mieux que d'utiliser un simple vieux variable, parce que je peux créer l'alias avant de tester l'existence de la clé sans déclencher d'erreur.Juste être sûr de unset (
unset($foobar)
) l'alias lorsque vous avez terminé. Sinon, si vous réutilisez le nom de la variable plus tard, vous finirez par l'écrasement quelle que soit l'alias a été pointant vers.Vous pouvez utiliser des alias dans d'autres façons, trop--ils ne sont pas limités à des affectations. Ils travaillent:
foreach ($a as &$b)
de l'Affectation à$b
va remplacer la valeur correspondante dans$a
. Unset$b
lorsque vous avez terminé, ou vous pourrez rencontrer des problèmes bizarres!function foobar(&$a)
de l'Affectation à$a
dansfoobar
va changer quelle que soit la variable de l'appelant transmis comme$a
.function &foobar()
tout ce qui est retournée peuvent être modifiés par l'appelant; c'est utile pour passer des alias. Il est également facile à des abus.$a = array(&$b)
Toute modification de$a[0]
affectent maintenant les$b
, y compris les affectations.call_user_func('foobar', array(&$a))
en Supposantfoobar
prend un seul paramètre alias,foobar
pouvez maintenant modifier$a
. Cela vous permet d'appeler des fonctions/méthodes avec alias paramètres à l'aide decall_user_func_array
.Exemples
Scalaires
Objets
&=
&=
est pas lié à la=&
. Il s'agit d'un ensemble d'opérations d'affectation. Voici quelques-uns:+=
-=
*=
/=
Voir la tendance ici?
Opérateurs arithmétiques binaires ont généralement affectation homologues. Disons
@
étaient un opérateur arithmétique (ce n'est pas que de l'écriture), de sorte que$a @ $b
offre généralement un certain nombre quand$a
et$b
sont des nombres. (Pense: Addition, multiplication, division, etc.) Combien de fois avez-vous besoin de faire quelque chose comme cela?Assez souvent. Il ne semble pas un peu inutile de les répéter
$a
? De nombreuses langues, y compris PHP, résoudre cela avec un tableau d'affectation des opérateurs:Beaucoup plus simple, et pour un programmeur habitué à cette notation, peut-être plus concis et descriptif en un clin d'œil. (Certes, je le trouve plus facile à lire, puisque je suis tellement habitué à elle.) Donc pour double d'une variable:
Rapide, facile, et relativement descriptive. Certains langages de programmation, y compris PHP, extension de cette fonctionnalité au-delà de l'arithmétique pour un supplément de fonctionnement ou deux. Notamment:
Très utile.
&=
chutes chez ces opérateurs d'assignation, parce que&
représente un bit-à-bit de l'arithmétique ET de l'exploitation. Il y a quelques autres personnes mentionnées dans la documentation PHP (voir le lien ci-dessus), qui sont communs à de nombreux langages de programmation.Cela signifie que
$a &= $b
est le même que$a = $a & $b
.