Maison > Article > développement back-end > Comment utiliser l'esperluette de référence ? Explication détaillée des exemples d'utilisation de php et de symboles
Qu'est-ce qu'une référence php ?
cité en PHP signifie : différents noms accèdent à la même variableContenu. Référence PHP (c'est-à-dire ajouter une esperluette devant des variables ou des fonctions, des objets, etc.). On dirait que vous prenez des commandes ? Expliquons-le ci-dessous :
1. 🎜>Les références PHP
permettent d'utiliser deux variables pour pointer vers le même contenuExemple 1 :
Exemple 2 :
<?php $a="2010"; $b =&$a; echo $a;//这里输出:2010 echo $b;//这里输出:2010 $b="2012"; echo $a;//这里$a的值变为2012 所以输出 echo $b;//这里输出2012 ?>
Depuis les deux exemples ci-dessus, on peut voir que l'attribution de l'adresse mémoire de
$b<?php $a = "date"; $b = &$a; echo $a; // date echo $b; // date $b = "date1"; echo $a; // date1 echo $b; // date1 unset($a); echo $b; // date1 ?>à
$b n'est pas une simple affectation. Ainsi, toute opération sur $b affectera également $a
Une autre façon de le dire est de donner $a<.>Ajout d'un alias
$bSi vous supprimez $a, seul le nom de la variable sera supprimé, mais le contenu de la variable ne sera pas supprimé. utilisez l'alias pour supprimer le contenu de la variable. (Comme le montre la figure)
2. Appel de fonction par adresse
Exemple 3 :
Comment faire icitest(
1<?php function test(&$a) { $a=$a+100; } $b=1; echo $b;//输出1 //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 test($b); echo $b;//输出101 ?>);
ça va mal se passer
Les paramètres de description ne peuvent être que des variables, les constantes n'ont pas d'adresse.
3. Retour de référence de fonction
Le retour de référence de fonction est principalement utilisé dans les objets, il est facile à comprendre ici Utilisez la variable
Statique Remarque, cette fonction a une sortie et renvoie une valeur.<?php function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } //这条语句会输出 $b的值 为1 $a=test(); $a=5; $a=test();//这条语句会输出 $b的值 为2 $a=&test();//这条语句会输出 $b的值 为3 $a=5; $a=test();//这条语句会输出 $b的值 为6 ?>$a = test()
; attribuez simplement la valeur de retour
$bde la fonction test à $a Oui, c'est juste une affectation normale, pas un retour de référence d'une fonction. Ainsi, quelle que soit l'opération effectuée par $a, elle n'affectera pas $b. $a = &test(); est utilisé pour comparer l'adresse mémoire de
$bavec l'adresse mémoire de $a L'adresse pointe vers le même endroit, ce qui produira un effet similaire à $b = &$a Si la valeur de $a change, elle devient 5, affectera également la valeur de $b. Ainsi, lors de l'exécution de $a = &test(); $a = 5, il y aura $b = 5, et la fonction affichera $ b = 6; >L'effet de l'exécution en PHP5 la copie d'objets est obtenu grâce aux références.
上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b;
PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本。 为了这样的目的,PHP定义了一个特殊的方法,称为clone。
5. 引用的作用
如果程序比较大,引用同一个对象的变量比较多,并且希望用完 该对象后手工清除它,建议用 "&" 方式,然后用$var=null的方式清除。其它时候还是用php5的默认方式吧.。
另外, php5中对于大数组的传递,建议用 "&" 方式, 毕竟节省内存空间使用。
6. 取消引用
当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。
例如:
<?php $a = 1; $b =& $a; unset ($a); ?>
不会 unset $b,只是 $a。
可以参看变量的引用那段
7. global 引用
当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。
它等价于下面这段代码:
<?php $var =& $GLOBALS["var"]; ?>
这意味着,例如,unset $var 不会 unset 全局变量。
8. $this
在一个对象的方法中,$this 永远是调用它的对象的引用。
另外说明
php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用 采用的是“写时拷贝”的原理,就是除非发生写操作,才会拷贝,其他操作,指向同一个地址的变量或者对象是不会被拷贝的。
假如,有以下代码:
$a="ABC";
$b=$a;
À ce moment, $a et $b pointent tous deux vers la même adresse mémoire, et non $a et $b Occupant des mémoires différentes
Si vous ajoutez le code suivant en plus du code ci-dessus,
$a="EFG";
procédez ici " Opération "Ecriture"
Puisque les données dans la mémoire pointées par $a et $b doivent être réécrites, le noyau Zend jugera automatiquement à ce moment et produira automatiquement une copie des données de $a pour $b, et réécrivez-le. Demandez un morceau de mémoire pour le stockage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!