Maison  >  Article  >  développement back-end  >  Comment utiliser l’esperluette de référence ? Explication détaillée des exemples d'utilisation de php et de symboles

Comment utiliser l’esperluette de référence ? Explication détaillée des exemples d'utilisation de php et de symboles

伊谢尔伦
伊谢尔伦original
2017-06-21 10:47:582290parcourir

Qu'est-ce qu'une référence php ?

cité en PHP signifie : différents noms accèdent à la même variableContenu. Référence PHP (c'est-à-dire ajouter une esperluette devant des variables ou des fonctions, des objets, etc.). On dirait que vous prenez des commandes ? Expliquons-le ci-dessous :

1. 🎜>Les références PHP

permettent d'utiliser deux variables pour pointer vers le même contenu

Exemple 1 :

Exemple 2 :

<?php
$a="2010";
$b =&$a;
echo $a;//这里输出:2010
echo $b;//这里输出:2010
$b="2012";
echo $a;//这里$a的值变为2012 所以输出
echo $b;//这里输出2012
?>

Depuis les deux exemples ci-dessus, on peut voir que l'attribution de l'adresse mémoire de

$b
<?php
$a = "date";
$b = &$a;
echo $a; // date
echo $b; // date
$b = "date1";
echo $a; // date1
echo $b; // date1
unset($a);
echo $b; // date1
?>
à

$b n'est pas une simple affectation. Ainsi, toute opération sur $b affectera également $a

Une autre façon de le dire est de donner $a<.>Ajout d'un alias

$b

Si vous supprimez $a, seul le nom de la variable sera supprimé, mais le contenu de la variable ne sera pas supprimé. utilisez l'alias pour supprimer le contenu de la variable. (Comme le montre la figure)

2. Appel de fonction par adresse

Exemple 3 :

Comment faire ici

test(

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

ça va mal se passer 

Les paramètres de description ne peuvent être que des variables, les constantes n'ont pas d'adresse.

php引用符号详解 - 蓝色花絮 - 永远的2009

3. Retour de référence de fonction

Le retour de référence de fonction est principalement utilisé dans les objets, il est facile à comprendre ici Utilisez la variable

Statique

comme exempleExemple 4 :

Remarque, cette fonction a une sortie et renvoie une valeur.

<?php
function &test()
{
    static $b=0;//申明一个静态变量
    $b=$b+1;
    echo $b;
    return $b;
}
//这条语句会输出 $b的值 为1
$a=test();
$a=5;
$a=test();//这条语句会输出 $b的值 为2
 
$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6
?>
$a = test()

 ; attribuez simplement la valeur de retour

$b

de la fonction test à $a Oui, c'est juste une affectation normale, pas un retour de référence d'une fonction. Ainsi, quelle que soit l'opération effectuée par $a, elle n'affectera pas $b. $a = &test(); est utilisé pour comparer l'adresse mémoire de

$b

avec l'adresse mémoire de $a L'adresse pointe vers le même endroit, ce qui produira un effet similaire à $b = &$a Si la valeur de $a change, elle devient 5, affectera également la valeur de $b. Ainsi, lors de l'exécution de $a = &test(); $a = 5, il y aura $b = 5, et la fonction affichera $ b = 6; >L'effet de l'exécution en PHP5 la copie d'objets est obtenu grâce aux références.

上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b;

PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本。 为了这样的目的,PHP定义了一个特殊的方法,称为clone 

5. 引用的作用

如果程序比较大,引用同一个对象的变量比较多,并且希望用完 该对象后手工清除它,建议用 "&" 方式,然后用$var=null的方式清除。其它时候还是用php5的默认方式吧.

另外, php5中对于大数组的传递,建议用 "&" 方式毕竟节省内存空间使用。 

6. 取消引用

当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

例如:

 <?php
$a = 1;
$b =& $a;
unset ($a);
?>

不会 unset $b,只是 $a

可以参看变量的引用那段

 7. global 引用

当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。

它等价于下面这段代码:

<?php
$var =& $GLOBALS["var"];
?>

 这意味着,例如,unset $var 不会 unset 全局变量。 

8. $this

在一个对象的方法中,$this 永远是调用它的对象的引用。 

另外说明

php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用 采用的是写时拷贝的原理,就是除非发生写操作,才会拷贝,其他操作,指向同一个地址的变量或者对象是不会被拷贝的。

假如,有以下代码:

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

À ce moment, $a et $b pointent tous deux vers la même adresse mémoire, et non $a et $b Occupant des mémoires différentes

Si vous ajoutez le code suivant en plus du code ci-dessus,

$a="EFG";

procédez ici " Opération "Ecriture"

Puisque les données dans la mémoire pointées par $a et $b doivent être réécrites, le noyau Zend jugera automatiquement à ce moment et produira automatiquement une copie des données de $a pour $b, et réécrivez-le. Demandez 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