utilisation de la référence php (&)

韦小宝
Libérer: 2023-03-17 16:28:01
original
1939 Les gens l'ont consulté

cité en PHP signifie : des noms différents accèdent au même contenu de variable. Il existe des différences entre PHP et les pointeurs en langage C. Le pointeur en langage C stocke l'adresse où le contenu de la variable est stocké en mémoire. Jetons un coup d'œil à php Utilisation des citations (&)

Référence de variable
La référence de PHP vous permet d'utiliser deux variables pour pointer au même contenu.

<?php
$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b="EFG";
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>
Copier après la connexion

Appel de fonction par passage par référence
Je ne dirai pas grand-chose sur l'appel par passage par référence. Le code est donné directement ci-dessous.

function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b;//输出101
Copier après la connexion

Il convient de noter que si test(1); est utilisé ici, une erreur se produira vous-même
Le retour de référence de la fonction
Regardez le. code d'abord

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
Copier après la connexion

Explication ci-dessous :
Ce que vous obtenez de cette façon $a=test(); n'est pas réellement un retour de référence de la fonction. Ce n'est pas différent d'un appel de fonction ordinaire. Quant à la raison : C'est la régulation de PHP
Régulation PHP Ce qui est obtenu via $a=&test(); est le retour de référence de la fonction
Quant à ce qu'est un retour de référence (le manuel PHP dit : le retour de référence est utilisé lorsque vous souhaitez utiliser une fonction pour trouver à quelle variable la référence doit être liée) En ce qui concerne ce qui précède.) Je n'ai pas pu comprendre cette absurdité pendant longtemps
Utiliser l'exemple ci-dessus pour expliquer c'est que l'appel d'une fonction en utilisant $a=test() attribue simplement la valeur de la fonction à $a, et $ Toute modification apportée à a n'affectera pas $b
dans la fonction si la fonction est appelée via $. a=&test(), sa fonction est de comparer l'adresse mémoire de la variable $b en retour $b avec la variable $a. L'adresse mémoire pointe au même endroit
, ce qui produit l'effet équivalent ($a=. &b;). Donc changer la valeur de $a change également la valeur de $b, donc après avoir exécuté

$a=&test();
$a=5;
Copier après la connexion
Ensuite, la valeur de $b devient 5

C'est pour laisser tout le monde comprend 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 est principalement utilisé dans 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
?>
Copier après la connexion
Le code ci-dessus est. l'effet d'exécution en PHP5

En PHP5, la copie d'objets se fait via des références. 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 les objets par référence, mais parfois vous souhaiterez peut-être créer une copie d'un objet et espérer que les modifications apportées à l'objet d'origine n'affecteront pas la copie. À cet effet, PHP définit une méthode spéciale appelée clone.
Le rôle des références
Si le programme est. références relativement volumineuses Il existe de nombreuses variables dans le même objet et vous souhaitez l'effacer manuellement après avoir utilisé l'objet. Personnellement, il est recommandé d'utiliser la méthode "&", puis d'utiliser $var=null pour l'effacer. 🎜>Autre
utilise la méthode php5 par défaut. De plus, pour transférer de grands tableaux en php5, il est recommandé d'utiliser la méthode "&", après tout, cela économise de l'espace mémoire. Déréférence

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 :

ne supprimera pas $b, juste $a.
<?php
$a = 1;
$b =& $a;
unset ($a);
?>
Copier après la connexion

référence globale

Lors de la déclaration d'une variable avec global $var, vous créez en fait une référence à la variable globale. Cela revient à faire :


Cela signifie que, par exemple, unset $var ne supprimera pas une variable globale.
<?php
$var =& $GLOBALS["var"];
?>
Copier après la connexion


$this
Copier après la connexion
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, et est référencée en php C'est le principe de la "copie sur écriture", c'est-à-dire 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 y a le code suivant


En fait, $a et $b pointent vers la même adresse mémoire à ce moment, pas $a et $b Occupe une mémoire différente
$a="ABC";
$b=$a;
Copier après la connexion
2 : Si le code suivant est ajouté au code ci-dessus



$a="EFG";
Copier après la connexion



Parce que $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 demandera à nouveau un morceau de mémoire pour le stockage.


Recommandations associées :

Plusieurs fonctions de session courantes en php

La différence entre 0 et null en PHP

La chaîne php la plus complète

fonction de traitement

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal