Maison  >  Questions et réponses  >  le corps du texte

php - Quel impact aura la passe de référence esperluette sur les résultats de l'opération?

$a = 1;
$b = &$a; //Adresse du passe. Commenter cette ligne renvoie 5. Si elle n'est pas commentée (version PHP <7), elle renvoie 6
$c = (++$a) + (++$a);
echo $c;
Est-ce lié à la version ? De plus, le résultat est 6, ce qui me laisse vraiment perplexe

PHP中文网PHP中文网2676 Il y a quelques jours684

répondre à tous(3)je répondrai

  • typecho

    typecho2017-06-21 10:12:41

    Parlons d'abord de l'opération d'ajout d'une affectation de référence

    $b = &$a;

    Cette opération peut être considérée comme étant que toutes les opérations de $a$b都指向原本$a变量所在的那块内存(为了方便后面解释,称为内存X),也就是说,后面任何对于$a或者$b modifient directement la valeur dans cette mémoire.

    Donc, le processus en cours après l'ajout de cette ligne :

    1. Les étapes précédentes sont omises, le a initial est 1

    2. La valeur stockée dans
    3. $c = (++$a) + (++$a)的两次++$a都是在操作内存X,也就是把内存X里的值自增了两次,所以,在运算$c的值的时候,取的是这个内存里数的值,也就是自增了两次之后的内存X里的值。所以,是3 + 3 = 6(运算$c时候,内存X est 3).

    Parlons de l'opération après avoir commenté la référence

    Si non cité, alors pour $a的自增接操作直接修改内存X,而后通过运算符操作返回内存X的副本,这样,两次的++$a结果由于不是直接从内存X获取的,而是改变内存X值之后的副本,所以$c在运算的时候就是2 + 3 = 5.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-06-21 10:12:41

    Ceci est lié à l'implémentation sous-jacente de PHP. C'est une longue histoire. Il est recommandé de regarder l'analyse du même problème sur github
    Une exploration provoquée par un bug PHP :
    https://github.com/xurenlu. /ph...

    répondre
    0
  • 学习ing

    学习ing2017-06-21 10:12:41

    Vous produisez C, qu'est-ce que C a à voir avec votre B ?

    répondre
    0
  • Annulerrépondre