Maison  >  Article  >  développement back-end  >  L'affectation par référence affecte-t-elle la modification d'objet en PHP ?

L'affectation par référence affecte-t-elle la modification d'objet en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-22 07:22:02792parcourir

Does Assignment by Reference Affect Object Modification in PHP?

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!

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