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 :

Tableau et l'objet courant $this [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 70
    Points : 47
    Points
    47
    Par défaut Tableau et l'objet courant $this
    Bonjour à tous,

    j'opère une migration de php4 à php5 et un bout de code me fait défaut.
    J'ai un tableau dans lequel j'ajoute des élements à différentes place dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (blablablab) {
    ...
    $vectTemp[$cpt] = $this ;
    }
    En php4, pas de souci mon 1er élement était bien différent du 2nd.
    En php 5 l'élement 1 égale à l'élement 2 et ainsi de suite ...
    J'ai l'impression que "$this" est passé en référence en php5 alors qu'en php4 non.
    Qu'en pensez vous ?
    Y a t'il un moyen simple de le contourner ?

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Oui, le passage est à coup sûr par référence en php 5.

    Tu peux peut-être cloner ton objet pour obtenir le comportement voulu.

    http://fr2.php.net/language.oop5.cloning

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 70
    Points : 47
    Points
    47
    Par défaut
    Excellent merci beaucoup pour le coup de main

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Je profite du sujet pour lever un petit loup : l'attribut objet en lecture seule.

    Le truc est connu : j'ai une classe qui est composée d'un objet que je ne souhaite pas laisser accessible en écriture. Je vais donc faire juste coder le getter et je serais sûr que l'objet est en lecture seule.

    Sûr ? Attention au passage par référence :

    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
     
    <?php
    class Foobar {
        private $_obj;
     
        public function __construct() {
            $this->_obj = new StdClass();
            $this->_obj->value = "initial";
        }
     
        public function getObj() {
            return $this->_obj;
        }
    }
     
    $myFoobar = new Foobar();
     
    var_dump($myFoobar);
     
    $myObj = $myFoobar->getObj();
    $myObj->value = "modif";
     
    var_dump($myFoobar);
    Edifiant non ?

    A comparer avec ce code, qui protège un peu mieux notre objet interne :

    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
     
    <?php
    class Foobar {
        private $_obj;
     
        public function __construct() {
            $this->_obj = new StdClass();
            $this->_obj->value = "initial";
        }
     
        public function getObj() {
            return clone $this->_obj;
        }
    }
     
    $myFoobar = new Foobar();
     
    var_dump($myFoobar);
     
    $myObj = $myFoobar->getObj();
    $myObj->value = "modif";
     
    var_dump($myFoobar);
    Je vais peut-être même en faire un article dans les contributions, tiens...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MooTools] AddEvent sur un element dans une Class : this n'est pas l'objet courant
    Par Neilime05 dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 12/01/2011, 12h20
  2. Réponses: 5
    Dernier message: 06/09/2010, 11h15
  3. Objet Courant This et appel à un opérateur
    Par TheOyoStyledMan dans le forum C++
    Réponses: 2
    Dernier message: 13/06/2006, 16h35
  4. méthode sur l'objet courant?
    Par mathher dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2006, 17h27
  5. Erreur Objet requis : 'this' --> Comprend pas!!
    Par Grozeil dans le forum ASP
    Réponses: 3
    Dernier message: 30/03/2005, 09h46

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