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] magic function __set/__get


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 36
    Points : 29
    Points
    29
    Par défaut [POO] magic function __set/__get
    Bonjour à tous,

    Depuis deux jours je m'arrache les cheveux avec les magic function __get et __set sur mon pc.

    Voici le code tout simple qui marche sur un autre PC et qui ne fonctionne pas sous winamp & php 5.2.6

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
     
    $param = array
    (
    	'Data' =>	array
    	(
    		'Nom' => 'Dupond',
    		'Prenom' => 'Jean'
    	)
    );
     
    $myToto = new toto;
    $myToto->param = $param;
     
    echo $myToto->affiche();
     
    //----------------------
    class toto
    {
    	protected $varValues = array();
    	protected $nom;
    	protected $prenom;
     
    	public function __set($name,$value)
    	{
    		$this->varValues[$name]=$value;
    	}
     
    	public function __get($name)
    	{
    		return $this->varValues[$name];
    	}
     
    	public function affiche()
    	{	
    		$this->maj();
    		return $this->param['Data']['Nom'];
    	}
     
    	private function maj()
    	{
    		$this->param['Data']['Nom']= 'Durand';
    	}
     
    }
    Ce code me renvoi toujours 'Dupond', j'en peux plus je ne vois pas d'ou cela vient.

    Merci pour votre aide.

    --
    WG614

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Chez moi ca renvoit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Notice: Indirect modification of overloaded property toto::$param has no effect on line 44
    Durand
    J'ai lu des choses concernant ce warning mais ca depasse un peu mes connaissances.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 36
    Points : 29
    Points
    29
    Par défaut
    Merci Sabotage pour le message d'erreur, je vais voir ce que je trouve à ce sujet.

    Wg614

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est en tout cas effectivement lié à __get d'apres les articles que j'ai lus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    salut,

    essais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->varValues[$name]= (array)$value;
    Pour forcer,e type et la copie de l'objet au lieu du passage par référence.

    Si j'ai bon souvenir sa devrait régler ton problème

    bye

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 36
    Points : 29
    Points
    29
    Par défaut
    Salut à tous

    Je vous le dit c'est un truc de dingue, bon même en forcant le type, c'est toujours pareil.
    D'après ce que j'ai pu voir et ce qui expliquerai que cela marche sur certain pc, c'est qu'en version 5.2.4 c'est OK par contre en version 5.2.6 c'est plus bon.

    Bon je vais me résoudre à faire différement , mais si les pros du php ont une idée je suis preneur.

    En tout cas merci pour votre aide.

    ++

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    essais ainsi alors :
    $myToto->param = (array)$param;

    essais cela aussi
    $this->varValues[(string)$name]= (array)$value;

    Je suis à peu près certain que cela vient d'un passage par référence alors qu'il s'attend à une copie.

    bye

Discussions similaires

  1. [PHP 5.2] magic function to_int comme to_string
    Par LeGnome12 dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2013, 18h16
  2. magic __get() function depuis parent:: ?
    Par paragoge dans le forum Langage
    Réponses: 6
    Dernier message: 16/08/2010, 17h14
  3. [POO] __Get / __Set et héritage
    Par kendras dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2007, 14h51
  4. [POO] Utilisé la function __destruct() pour...
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2006, 14h56
  5. [POO] class abstraite et methode magic
    Par jeff_! dans le forum Langage
    Réponses: 14
    Dernier message: 24/01/2006, 23h19

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