Explication détaillée de la différence entre l'ajout de symboles @ et $ devant les fonctions et variables en PHP

伊谢尔伦
Libérer: 2023-03-10 22:20:02
original
7418 Les gens l'ont consulté

@ opérateur n'est valable que pour expression. Une règle simple pour les débutants est la suivante : si vous pouvez obtenir une valeur quelque part, ajoutez-la au début de l'opérateur @. Par exemple, vous pouvez le placer avant les variables, les fonctions et les appels include(), les constantes, etc. Il ne peut pas être placé avant la définition d’une fonction ou d’une classe, ni être utilisé dans des structures conditionnelles telles que if et foreach.
Le préfixe actuel "@" opérateur de contrôle des erreurs désactive même le rapport d'erreurs des erreurs fatales qui entraînent la fin du script. Cela signifie que si vous utilisez "@" pour supprimer le message d'erreur avant un appel de fonction qui n'existe pas ou qui est du mauvais type, le script mourra là sans aucune indication de raison.

Pour $ c'est notre question clé

Formulaire de base :

function &find_var($param) //这里用&在对象前面,作用为声明
{
    /* ...code... */
    return $found_var;
}
$foo =& find_var($bar); //这里用&,作用为联系变量
$foo->x = 2; //赋值给函数
Copier après la connexion

Exemple :

function &test()   
{   
static $b=0;//申明一个静态变量   
$b=$b+1;   
echo $b;   
return $b;   
}   
$a=test();//这条语句会输出$b的值为1,
$a=5;   
$a=test();//这条语句会输出$b的值为2 ,因为没有引用返回,$a=5,不对对象起赋值作用
$a=&test();//这条语句会输出$b的值为3 ,成功引用返回,下面的代码起作用
$a=5;   
$a=test();//这条语句会输出$b的值为6
Copier après la connexion

Explication ci-dessous :
Ce que vous obtenez de cette manière $a=test(); n'est pas réellement un retour de référence de fonction, ce qui n'est pas différent d'un appel de fonction ordinaire. Quant à la raison : il s'agit d'une réglementation PHP
PHP stipule que ce qui est obtenu via $a=&test();
Quant à ce qu'est le 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.)
Utiliser l'exemple ci-dessus pour expliquer :
L'appel d'une fonction dans la méthode $a=test() attribue uniquement la valeur de la fonction à $a, et toute modification apportée à $a n'affectera pas $b dans la fonction. Que diriez-vous d'appeler la fonction dans $a=&test. () ? , Sa fonction est de déplacer l'adresse mémoire de la variable $b en retour $b et l'adresse mémoire de la variable $a au même endroit, produisant l'équivalent de cet effet ($a=&b;) Donc changer le $a La valeur change également la valeur de $b en même temps, donc après avoir exécuté : $a=&test();
$a=5;
, la valeur de $b devient 5.. .

Alors, à quoi sert l'ajout de l'esperluette devant la fonction php ?

Que signifie le symbole & devant une variable php ?
Regardons d'abord un exemple :

$foo = 321;
$bar = &$foo; 
$bar = 123;
print $foo;
//那么输出的结果将会是什么呢
Copier après la connexion

La modification de la nouvelle variable affectera la variable d'origine . Cette opération d'affectation est plus compliquée.
Remarque : seules les variables nommées peuvent être attribuées par adresse. C'est-à-dire que changer la valeur de $bar change également la valeur de $foo.

Un autre exemple :

$_GET[1] = 1;
function &a()
{
 $a = $_GET[1];
 return $a;
}
$x =& a();
$x = 'MoontoC';
echo $_GET[1]; // 此时这里会显示 MoontoC, 而不是最初赋值的1
Copier après la connexion

Comprenez-vous le sens Lorsque vous utilisez la fonction pour transférer des valeurs, les deux parties doivent utiliser des symboles de référence pour avoir un sens ? , peut-il être vraiment cité, et s'il n'y a pas de symbole de référence de chaque côté, vous n'obtiendrez pas le mauvais contenu, mais le contenu est transmis par valeur et non par référence. Il est en effet difficile pour les personnes qui n'ont aucune base en programmation de comprendre l'importance de passer par valeur et de passer par référence lorsqu'elles apprennent PHP pour la première fois. Elles sentent qu'elles peuvent obtenir ce qu'elles veulent de toute façon, mais ce n'est pas le cas dans de nombreux cas. , bien qu'ils obtiennent la même chose, le prix est complètement différent. Si une valeur de 2 millions de mots est transmise comme valeur, 4 millions de mots sont stockés dans la mémoire pour être utilisés en même temps, ce qui signifie que cela consomme deux fois plus. mémoire, et passer une référence n'est qu'un raccourci pour la transférer.

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