IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

POO affectation entre d'objet


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Par défaut POO affectation entre d'objet
    Bonjour

    je debute en POO, j'aimerai que quelqu'un corrige mes connaissances si celle-ci sont erronées.
    -
    -Si on affecte à un objet2 un autre objet1, puis on modifie les propriété de l'objet1 les propriétés de l'objet2 seront modifié en conséquence mais si on détruit l'object2 l'object1 reste intact et versi versa.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class SimpleClass
    {
        // déclaration des propriétés
        public $var = 'a default value';
     
        // déclaration des méthodes
        public function displayVar() {
            echo $this->var;
        }
    }
    $instance = new SimpleClass();
     
    $assigned   =  $instance;
    $reference  = $instance;
     
    $instance->var = '$assigned aura cette valeur';
     
    $reference = null; // $instance et $reference deviennent null
    echo '<pre>';
    var_dump($instance);
    echo '</pre>';
    echo '<pre>';
    var_dump($reference);
    echo '</pre>';
    echo '<pre>';
    var_dump($assigned);
    echo '</pre>';
    exact ?

    Merci d'avance

  2. #2
    Membre très actif Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Par défaut
    Citation Envoyé par Jcpan Voir le message
    -Si on affecte à un objet2 un autre objet1, puis on modifie les propriété de l'objet1 les propriétés de l'objet2 seront modifié en conséquence mais si on détruit l'object2 l'object1 reste intact et versi versa.
    Oui c'est ça.
    C'est une particularité de php, non pas de l'OOP en général. D'ailleurs dans l'ancienne version 4, ton exemple aurait un comportement différent ($instance et $assigned n'auraient pas le même $var après la modif).

    $instance et $reference sont 2 variables qui "pointent" sur le même objet. En interne, les objets sont numérotés (1, 2, ... N). Les vraies valeurs de $instance et $reference sont simplement les numéros des objets. Dans ton cas, ce sont les 2 mêmes numéros et donc les 2 mêmes objets.

    Quand on fait $instance->var = 'blah', php va modifier la propriété $var de l'objet sur lequel pointe la variable. Comme $reference pointe sur le même objet, on observe le comportement que tu as décrit.

    Quand on fait $reference = null, la valeur de $reference devient nulle ($reference contient "null" au lieu du numéro de l'objet). Mais la valeur de $instance n'a pas changé et pointe toujours sur l'objet initial.

    On dit parfois que dans php 5, les objets sont automatiquement passés et manipulés par référence contrairement aux autres types de variables (array etc). En fait c'est faux. Les objets sont passés par valeur mais la valeur passée est non pas l'objet, mais son numéro. On peut voir ça comme une manipulation de pointers dans le langage C avec des déréférençages automatiques pour faciliter la vie du programmeur.

Discussions similaires

  1. [POO] affecter un objet de type file à un autre
    Par slash_X dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/02/2009, 10h06
  2. Réponses: 7
    Dernier message: 22/10/2008, 10h14
  3. [POO] Mise en cummun de variables entre les objets
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2007, 08h22
  4. [POO] affectation dynamique d'une méthode à un objet
    Par Delphi-ne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/02/2006, 21h17
  5. Réponses: 4
    Dernier message: 25/09/2004, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo