Référence de variable
La référence PHP vous permet d'utiliser deux variables pour pointer vers le même contenu
<?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?>
Je n'ai pas beaucoup d'appels de passage par référence pour Cela dit, le code est donné directement ci-dessous
<?php function test(&$a){ $a=$a+100; } $b=1; echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b;//输出101 ?>
Il est à noter que si test(1); la référence ne peut pas être une constante (vous pouvez voir le message d'erreur) .
Retour de référence de fonction Regardez d'abord le code
<?php function &test(){ static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } } $a=test();//这条语句会输出 $b的值 为1 $a=5; $a=test();//这条语句会输出 $b的值 为2 $a=&test();//这条语句会输出 $b的值 为3 $a=5; $a=test();//这条语句会输出 $b的值 为6 ?>
L'explication suivante : De cette façon, $a=test(); Il n'y a aucune différence dans les appels de fonction. Quant à la raison : c'est la réglementation PHP qui stipule que ce qui est obtenu via $a=&test(); le manuel PHP dit : Le retour de référence est utilisé lorsque vous souhaitez utiliser Lorsque la fonction trouve à quelle variable la référence doit être liée ) Cette absurdité m'a rendu incapable de le comprendre pendant longtemps
Utilisez l'exemple ci-dessus. pour expliquer que la fonction est appelée en utilisant $a=test(), qui vient d'attribuer la valeur de la fonction à $a, et toute modification apportée à $a n'affectera pas $b dans la fonction lors de l'appel de la fonction via $. a=&test(), sa fonction est de renvoyer la valeur dans $b. L'adresse mémoire de la variable $b et l'adresse mémoire de la variable $a pointent au même endroit, ce qui produit le même effet ($a=&b; ). Ainsi, changer la valeur de $a change également la valeur de $b, donc lors de l'exécution de After $a=&test(); $a=5;, la valeur de $b devient 5
C'est à dire. laissez tout le monde comprendre le retour de référence de la fonction avant d'utiliser des variables statiques. En fait, le retour de référence de la fonction a de nombreuses utilisations Dans l'objet
la référence de l'objet
<?php class a { var $abc="ABC"; } $b=new a; $c=$b; echo $b->abc;//这里输出ABC echo $c->abc;//这里输出ABC $b->abc="DEF"; echo $c->abc;//这里输出DEF ?>
Le Le code ci-dessus est l'effet exécuté en PHP5. En PHP5, la copie des objets est réalisée par référence. Dans la colonne ci-dessus, $b=new a; $c=$b; est en fait équivalent à $b=new a; La valeur par défaut en PHP5 est d'appeler l'objet par référence, mais parfois vous pouvez le faire. vouloir créer un objet Une copie de l'objet original et espérer que les modifications apportées à l'objet original n'affecteront pas la copie. À cet effet, PHP définit une méthode spéciale appelée __clone.
Le rôle de référence
. Si le programme est relativement volumineux, s'il existe de nombreuses variables qui font référence au même objet et que vous souhaitez l'effacer manuellement après avoir utilisé l'objet, je recommande personnellement d'utiliser la méthode "&", puis d'utiliser $var=null pour effacer Dans d'autres cas, utilisez la méthode par défaut de php5. De plus, pour le transfert de grands tableaux en php5, il est recommandé d'utiliser la méthode "&", après tout, cela économise de l'espace mémoire.
Unreference Lorsque vous supprimez une référence, vous rompez simplement la liaison entre le nom de la variable et le contenu de la variable. Cela ne signifie pas que le contenu des variables est détruit. Par exemple :
115c9d6bf06c9f77722327e460010e96
ne supprimera pas $b, juste $a. function quoteTest(){ global $var; //Équivalent à $var = &$GLOBALS['var']; unset($var); //La suppression supprime uniquement la référence, mais le contenu référencé existe toujours. Cela ne veut pas dire que le contenu de la variable est détruit}$var=1;quoteTest();echo $var; // Résultat 1
----------------- --------- ----------------------------------------- --------- -------------------------
ne supprimera pas $b, juste $a .
function quoteTest(){ global $var ; //Équivalent à $var = &$GLOBALS['var']; //Parce qu'ils pointent tous les deux vers le même contenu mémoire}$var =1 ;quoteTest();echo $var; //Résultat 5---------------------------------- ---------- --------------------------------------------- ---------- -------
'&' Ceci est une référence
référence globale Lors de la déclaration d'une variable avec global $var, une référence à la variable globale est effectivement établie. Cela revient à faire :
16d5bca28eea70134faf7d1a6e335023
Cela signifie, par exemple, que les variables globales $var non définies seront ne soit pas désarmé.
$this Dans une méthode d'un objet, $this est toujours une référence à l'objet qui l'appelle.
//Voici un autre petit épisode. La fonction de pointage (similaire au pointeur) de l'adresse en PHP n'est pas implémentée par l'utilisateur lui-même, mais est implémentée par le noyau Zend. La référence en PHP utilise le "copy-". on-write" Le principe est qu'à moins qu'une opération d'écriture ne se produise, les variables ou objets pointant vers la même adresse ne seront pas copiés.
En termes simples 1 : S'il existe le code suivant [php] $a="ABC" ; $b=$a [/php] En fait, $a et $b pointent tous les deux vers le même; adresse mémoire à ce moment Ce n'est pas que $a et $b occupent des mémoires différentes
2 : Si vous ajoutez le code suivant au code ci-dessus [php] $a="EFG" [/php] Puisque $a et Les données dans la mémoire pointées par $b doivent être réécrites. À ce stade, le noyau Zend déterminera et produira automatiquement une copie des données de $a pour $b, et réappliquera un morceau de mémoire. pour le rangement