Maison  >  Article  >  développement back-end  >  Le rôle du symbole & en php - référence de variable, référence de fonction, référence d'objet

Le rôle du symbole & en php - référence de variable, référence de fonction, référence d'objet

巴扎黑
巴扎黑original
2017-08-05 10:22:331711parcourir

Référence PHP (c'est-à-dire ajouter une esperluette devant une variable, une fonction, un objet, etc.) //Le plus important est de supprimer la variable référencée. C'est juste que la variable référencée n'est pas accessible, mais. le contenu n'est pas détruit. La signification de la référence en PHP est : Différents noms accèdent au même contenu de variable

Référence de variable
 
La référence de PHP vous permet d'utiliser deux variables vers lesquelles pointer. 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'entrerai pas dans les détails sur la fonction d'appel par référence et la fonction d'appel par référence. Le code sera donné. directement ci-dessous


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


Il convient de noter que si test(1) est utilisé ici, une erreur se produira La raison est la suivante : PHP stipule que. la référence passée ne peut pas être une constante (voir le message d'erreur).

La référence de fonction renvoie Regardons d'abord le code


<?phpfunction &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 What =test(); n'est en fait pas une référence de fonction, ce qui n'est pas différent d'un appel de fonction ordinaire. La raison : c'est la réglementation PHP qui stipule que ce qui est retourné par $a=&test(); une référence de fonction. Qu'est-ce qu'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.) Cette absurdité m'a empêché de la comprendre pendant longtemps. time

Utilisation L'exemple ci-dessus explique que l'appel d'une fonction en utilisant $a=test() attribue uniquement la valeur de la fonction à $a, et toute modification apportée à $a n'affectera pas $b dans la fonction, Lors de l'appel d'une fonction via $a=&test(), sa fonction est de pointer l'adresse mémoire de la variable $b dans return $b au même endroit que l'adresse mémoire de la $a variable a 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(); 5; , la valeur de $b devient 5

Les variables statiques sont utilisées ici pour permettre à chacun de comprendre le retour de référence de la fonction. En fait, le retour de référence de la fonction est principalement utilisé dans les objets

.

Citation des objets


<?phpclass 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 code ci-dessus est l'effet exécuté en PHP5En PHP5, la copie de les objets sont réalisés grâce à 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 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, qu'il existe de nombreuses variables faisant référence au même objet et que vous souhaitez effacer manuellement l'objet après l'avoir utilisé, je recommande personnellement d'utiliser la méthode "&", puis d'utiliser $var= null pour l'effacer. D'autres fois, utilisez php5 La méthode par défaut. 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.

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. 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, cela crée en fait une variable globale. Cela revient à faire :

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-là. 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 les données dans la mémoire pointées par $a et $b seront réécrites, ceci temps, le noyau Zend déterminera et produira automatiquement une copie de données de $a pour $b, et demandera à nouveau 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!

Déclaration:
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