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

不言
Libérer: 2023-03-25 06:42:01
original
2490 Les gens l'ont consulté


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());
Copier après la connexion
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());
Copier après la connexion
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');
Copier après la connexion
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');
Copier après la connexion


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!

É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