Maison  >  Article  >  développement back-end  >  Explication détaillée de la signification et de la fonction de l'ajout de l'esperluette avant le nom de la fonction PHP ?

Explication détaillée de la signification et de la fonction de l'ajout de l'esperluette avant le nom de la fonction PHP ?

伊谢尔伦
伊谢尔伦original
2017-06-21 10:53:134030parcourir

En PHP, le symbole & transmet une référence à une variable plutôt qu'une copie. La référence signifie accéder au même contenu de variable avec des noms différents. Ce n'est pas comme les pointeurs de C, qui sont des alias de table de symboles. Notez qu'en PHP, le nom de la variable et le contenu de la variable sont différents, donc le même contenu peut avoir des noms différents. L'analogie la plus proche concerne les noms de fichiers Unix et les fichiers eux-mêmes : les noms de variables sont les entrées du répertoire et le contenu des variables est les fichiers eux-mêmes. Les références peuvent être considérées comme des connexions étroites dans le système de fichiers Unix .

Les références PHP vous permettent d'utiliser deux variables pour pointer vers le même contenu. Cela signifie que lorsque vous le faites :

<?php 
$a =&$b 
?>

cela signifie que $a et $b pointent vers la même variable.
Remarque : $a et $b sont exactement les mêmes ici. Cela ne signifie pas que $a pointe vers $b ou vice versa, mais que $a et $b pointent vers le même endroit.
La même syntaxe peut être utilisée dans les fonctions, qui renvoient des références, et dans l'opérateur new (PHP 4.0.4 et versions ultérieures) :

<?php 
$bar =& new fooclass(); 
$foo =& find_var ($bar); 
?>

Remarque : l'opérateur No & est utilisé comme caractère provoque la création d'une copie de l'objet. Si vous utilisez $this dans une classe, cela s'appliquera à l'instance actuelle de cette classe. L'affectation sans & copiera l'instance (par exemple un objet) et $this sera appliqué à la copie, ce qui n'est pas toujours le résultat souhaité. En raison de problèmes de performances et de consommation de mémoire, vous souhaitez généralement travailler sur une seule instance.
Bien que vous puissiez utiliser l'opérateur @ pour désactiver tout messages d'erreur dans un constructeur, par exemple avec @new, cela n'a aucun effet lors de l'utilisation d'une instruction &new. Il s'agit d'une limitation du moteur Zend et entraînera une erreur d'analyse.
La deuxième chose qu'une référence fait est de transmettre une variable par référence. Ceci est accompli en créant une variable locale dans la fonction et cette variable fait référence au même contenu dans la portée appelante. Par exemple :

<?php 
function foo (&$var) { 
$var++; 
} 
$a=5; 
foo ($a); 
?>

changera $a en 6. En effet, dans la fonction foo, la variable $var pointe vers la même chose que $a. Voir Passage par référence pour une explication plus détaillée.
La troisième chose qu'une référence fait est le retour de référence.

Quelle est la signification d'ajouter l'esperluette devant la fonction php  ? Vous trouverez ci-dessous deux codes de démonstration, puis des explications.

function &chhua()
{
static $b="www.php.cn";//申明一个静态变量
$b=$b."WEB开发";
echo $b;
return $b;
}
  
$a=chhua();//这条语句会输出 $b的值 为“www.php.cnWEB开发”
$a="PHP";
echo "<Br>";
$a=chhua();//这条语 句会输出 $b的值 为“www.php.cnWEB开发WEB开发” 
echo "<Br>";
$a=&chhua();//这条语句会输出 $b的值 为“www.php.cnWEB开发WEB开发WEB开发”
echo "<Br>";
$a="JS";
$a=chhua(); //这条语句会输出 $b的值 为"JSWEB开发"
  
  
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

Expliquons la deuxième fonction.
Ce que vous obtenez de cette façon $a=test(); n'est pas réellement un retour de référence de la fonction.

Quant à la raison : c'est la raison. régulation de PHP
php Il est stipulé que 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 (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)

En utilisant l'exemple ci-dessus pour expliquer, en appelant la fonction dans le
$a. =test() attribue simplement la valeur de la fonction à $a. C'est tout, et toute modification apportée à $a n'affectera pas $b dans la fonction.
Et lors de l'appel de la fonction via $a=&test(), sa fonction est de renvoyer la mémoire de la variable $b dans $b L'adresse et l'adresse mémoire de la variable $a,
pointent vers le même endroit, c'est-à-dire que l'effet est équivalent à ceci ($a). =&b;). Donc, changer la valeur de $a change également la valeur de $b, donc après avoir exécuté :
$a=&test(); $a=5;, la valeur de $b devient 5.

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