Maison  >  Article  >  développement back-end  >  Explication détaillée de l'utilisation du symbole de référence (&) en php

Explication détaillée de l'utilisation du symbole de référence (&) en php

墨辰丷
墨辰丷original
2018-05-29 17:35:381547parcourir

La référence de PHP consiste à ajouter le symbole & devant la variable, la fonction, l'objet, etc. La référence en PHP signifie : différents noms accèdent au même contenu de variable. Ce qui suit est une introduction à la façon d'utiliser la référence. de PHP. Les amis qui en ont besoin peuvent s'y référer. Il y a une différence entre

et les pointeurs en langage C. Le pointeur en langage C stocke une référence à la variable d'adresse où le contenu de la variable est stocké en mémoire.

La référence de PHP vous permet d'utiliser deux variables pour pointer vers le même contenu

$a="ABC"; 
$b =&$a; 
echo $a;//这里输出:ABC 
echo $b;//这里输出:ABC 
$b="EFG"; 
echo $a;//这里$a的值变为EFG 所以输出EFG 
echo $b;//这里输出EFG

Appel de fonction passe par référence

Je n'entrerai pas dans les détails de l'appel par référence. Le code sera donné directement. ci-dessous

<?php
function 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); >

Le retour de référence de la fonction

Regardez d'abord le code

<?php
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

?>

Explication ci-dessous :


Ce que vous obtenez de cette façon $a=test(); n'est en fait pas une fonction. Le retour de référence n'est pas différent des appels de fonction ordinaires. Quant à la raison : c'est la règle de PHP

PHP stipule que le. le retour de référence de la fonction 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. .) Cette absurdité m'a rendu incapable de le comprendre pendant longtemps

Utilisez ce qui précède. Un exemple pour expliquer est que l'appel d'une fonction dans le


$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 en retour $b et l'adresse mémoire de la variable $a au même endroit, ce qui produit l'équivalent de cet effet ($a=&b;) Donc changer la valeur de $a change également la valeur de $. b, donc après avoir exécuté


$a=&test(); $a= 5

Après cela, la valeur de $b devient 5


La variable statique est utilisée ici pour permettre à chacun de comprendre le retour de référence de la fonction. En fait, les retours de référence de la fonction sont principalement utilisés dans les objets


Références aux objets

<?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

?>

Le code ci-dessus est dans Exécution d'effets en PHP5


Dans PHP5, la copie des 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



Fonction référencée.


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 utilisez la méthode $var =null pour effacer. Sinon, utilisez la méthode par défaut de php5. 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érencement


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 :

$a = 1; 
$b =& $a; 
unset ($a);

ne supprimera pas $b, juste $a.


référence globale


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

$var =& $GLOBALS["var"];

Cela signifie que, par exemple, unset $var ne supprimera pas une variable globale.


$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 Zend core , la référence en PHP adopte 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

$a="ABC"; 
$b=$a;

En fait À ce moment, $a et $b pointent tous deux vers la même adresse mémoire au lieu que $a et $b occupent des mémoires différentes 2 : Si vous ajoutez le code suivant au code ci-dessus

.

$a="EFG";

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

PHPL'avantage de l'ajout d'un espace de noms est de faciliter le chargement automatique

PHPDéfinition du niveau d'erreur et analyse du principe

Déclaration de rupture de contrôle de flux PHP


instruction continue pour le contrôle de flux PHP


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