Comparaison entre l'affectation de variables et l'affectation d'objets
<?php // 声明一个变量并赋值 $a = 1; // 将数据类型的值 赋值 给一个变量 $b = $a; // 修改$a的值 $a = 2; // $a和$b是两个独立的内存空间修改其中一个另一个不受影响 echo $b; // 1 class Person { public $name; public $age; } // 将对象类型的数据 赋值 给一个变量 $p = new Person; // 通过对属性修改值,来确定面向对象中 对象的传值方式 $p->name = 'jesse'; // 若是成功修改值,则是引用传值 echo $p->name; // jesse ?>
Explication du cas :
Ici, la méthode d'affectation des variables et la Les méthodes d'affectation d'objet sont comparées Par rapport à la méthode d'affectation, la méthode d'affectation à la ligne 5 du code est "affectation de copie", donc lorsque la valeur source (la valeur de $a) est modifiée, la valeur de $b n'est pas affectée . Le diagramme de relation mémoire de $a et $b est le suivant :
La ligne 20 du code attribue le type de données à la variable $p et modifie avec succès la valeur à l'intérieur l'objet via $p. Comparez les variables La méthode de passage de valeur prouve qu'il s'agit d'un passage de référence. Le diagramme de relation mémoire est le suivant :
Et la ligne 20 du Le code attribue le type de données à la variable $p et modifie l'intérieur de l'objet via $p La valeur est réussie. En comparant la méthode de transfert de valeur de la variable, il est prouvé qu'il s'agit d'un transfert de référence. Le diagramme de relation mémoire est le suivant. suit :
<?php class Person { public $name; public $age; // 将对象类型的数据 赋值 给一个变量 $p = new Person; // 通过对属性修改值,来确定面向对象中 对象的传值方式 $p->name = 'jesse'; // 将对象赋予另一变量 $m = $p; // 另一变量修改属性值 $m->name = 'Marry'; // 输出源变量 赋值变量访问内部属性的结果 echo $p->name, $m->name; } ?>
La 12ème ligne de code est le code le plus "glaçage" de cet article. Le côté droit du signe égal est un objet, et le côté gauche est une variable, voici donc le dièse. question, est-ce que $m copie l'objet ? Ou le passer par référence ? La relation mémoire de ce code est la suivante :
Ainsi, les valeurs d'attribut des deux derniers objets sont modifiées pour Marry !!!
Puis en passant par référence, quelle est la situation ?
<?php class Person { public $name; public $age; } // 将对象类型的数据 赋值 给一个变量 $p = new Person; // 通过对属性修改值,来确定面向对象中 对象的传值方式 $p->name = 'jesse'; // 将对象赋予另一变量 $m = &$p; // 另一变量修改属性值 $m->name = 'Marry'; // 输出源变量 赋值变量访问内部属性的结果 echo $p->name, $m->name; ?>
Pour plus de contenu connexe, veuillez visiter le site Web PHP chinois : Tutoriel vidéo 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!