Maison >développement back-end >tutoriel php >Explication détaillée de la connaissance des variables de référence PHP

Explication détaillée de la connaissance des variables de référence PHP

不言
不言original
2018-04-28 13:45:232534parcourir


Cet article présente principalement les connaissances détaillées sur les variables de référence PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

  • Concept : La référence en PHP signifie accéder au même contenu de variable avec des noms différents

  • Méthode de définition : PHP utilise '& ; 'Définir les variables de référence ;

  • Lorsque les références ne sont pas utilisées, les variables adoptent un mécanisme de copie sur écriture (COW) : une copie de la mémoire sera copiée pour modification lorsque écrire, par exemple

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = $a; //此时$b和$a 指向同一个内存空间
var_dump(memory_get_usage());
//当a或b发生写入时,才会复制一块内存进行修改
$a = range(0,1000);
var_dump(memory_get_usage());
Résultats d'exécution : L'utilisation de la mémoire était similaire pour la première et la deuxième fois d'impression, mais a changé de manière significative pour la troisième fois, indiquant que lorsqu'un exécute une écriture opération, la réplication de l'utilisation de la mémoire a eu lieu.


  • Lors de l'utilisation d'une référence, la variable pointera vers le même espace mémoire et ne changera pas pendant le opération d'écriture.

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = &$a; //将a的空间赋值给b,a与b指向同一空间
var_dump(memory_get_usage());
//当a或b发生写入时,内存不会发生复制
$a = range(0,1000);
var_dump(memory_get_usage());
Résultats de fonctionnement : La mémoire n'a pas changé de manière significative

Vérifié via le conteneur de variables zval

//通过zval变量容器打印
$a = range(0,3);
xdebug_debug_zval('a');//打印 指向内存空间的变量数,和是否被引用
$c =&$a;
xdebug_debug_zval('a');
$c = range(0,3);
xdebug_debug_zval('a');
Résultats d'exécution :

Lors de l'écriture dans c, il y a toujours 2 variables pointant vers la mémoire, et la copie sur écriture ne se produit pas



  • unset annulera uniquement la référence et ne détruira pas l'espace

  • En PHP, le l'objet lui-même est transmis par référence, et non les symboles de référence doivent être utilisés

class Person{
    public $name  = "zhangsan";
}
$p1 = new Person();
xdebug_debug_zval('p1');

$p2 = $p1;
xdebug_debug_zval('p1');

$p2->name = "lesi";
xdebug_debug_zval('p1');


Recommandations associées :

Définition de référence php et paramètres de passage de référence Explication détaillée des exemples d'utilisation


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