Détermination de l'affectation d'objets en PHP
Dans la programmation PHP, les objets peuvent être attribués par valeur ou par référence. Cette distinction affecte la manière dont les modifications apportées à un objet se reflètent dans d'autres parties du code.
Considérons le code suivant :
<code class="php">class Foo { var $value; function foo($value) { $this->setValue($value); } function setValue($value) { $this->value = $value; } } class Bar { var $foos = array(); function Bar() { for ($x = 1; $x <= 10; $x++) { $this->foos[$x] = new Foo("Foo # $x"); } } function getFoo($index) { return $this->foos[$index]; } function test() { $testFoo = $this->getFoo(5); $testFoo->setValue("My value has now changed"); } }</code>
La question se pose : lorsque le "Bar::test( )" est exécutée, la modification de "foo # 5" dans le tableau d'objets "Foo" affectera-t-elle l'objet "foo # 5" lui-même ou créera-t-elle une variable locale distincte "testFoo" ?
Réponse :
Pour déterminer la réponse, nous pouvons exécuter le code et observer le résultat :
<code class="php">$b = new Bar; echo $b->getFoo(5)->value; $b->test(); echo $b->getFoo(5)->value;</code>
Le résultat du code ci-dessus devrait être :
Foo #5 My value has now changed
Cela indique que la modification apportée à l'objet "testFoo" affecte l'objet "foo # 5" réel dans le tableau. Ce comportement est attribué au concept « d'affectation par référence » dans PHP 5, qui s'applique aux objets par défaut.
Implications :
L'affectation par référence garantit que les les modifications apportées à un objet sont reflétées dans tout le code. Cependant, si vous souhaitez créer une copie indépendante d'un objet, vous pouvez utiliser le mot-clé « clone » pour effectuer une affectation basée sur la valeur.
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!