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 :

Référence à un object dans un autre object


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut Référence à un object dans un autre object
    Bonjour,

    J'ai 2 objets, O1 et O2.

    Mettons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class O1 {
    ...
    }
     
    class O2 {
    private $objO1;
     
    public __construct($objO1) {
    $this->$objO1 = $objO1;
    }
    }
    En essayant de stocker un référence vers une instance de O1 dans mon objet O2, le page me retroune:
    Object of class O1 could not be converted to string.

    Qu'est-ce que je fais mal ?

    Merci d'avance et bonne journée

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    O1 est un objet, il faut que tu appelles son constructeur ... est ce bon ?
    Soit le new dans le constructeur de O2, soit avant l'appel avec Object1 en paramètre.

  3. #3
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Hello,

    Bien que je ne l'ai pas précisé, j'ai bien sur construit l'objet O1 avant d'appeler le constructeur de O2.

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Oui, je sais que les questions peuvent être bêtes mais des fois ça bug pour une bêtise ...

    Continuons dans la simple vérif, tu as bien lors de la construction de l'objet1 et dans son script un include de la classe O1 car vu le message, il ne doit pas connaître la structure de l'objet O1 puisqu'il ne peut pas le sérialiser en string pour le passage de paramétre de la construction de 02.

  5. #5
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    Ton code est incomplet : tu ne ferais pas un echo $this->$objO1; par hasard ?

    Ton erreur ne vient que d'un problème de conversion de ton objet en string. Vu que l'erreur survient, c'est que quelque part du demande (implcitement ou non) à PHP de le caster en string (ce qui se passe quand tu fais echo, str_*...).

    Fais des var_dump() à la place des echo, ou si tu en as besoin implémente une méthode __toString()

  6. #6
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Alors pour etre plus complet
    index.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    require('o1.php');
    require('o2.php');
     
    $o1 = new O1();
    $o2 = new O2($o1);
    ?>
    o1.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class O1 {
    private $data;
    public function set_data($data) {
    $this->$data = $data;
    }
    public function get_data() {
    return $data;
    }
    }
    o2.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class O2 {
    private $o1;
     
    function __construct($o1) {
    $this->$o1 = $o1;
    }
    }
    L'exception qu'il me donne il me la donne sur le fichier o2.php, ligne $this->$o1 = $o1;

    Merci pour votre aide !!!

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    Chez moi ce code fonction :

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    include('o1.php');
    include('o2.php');
     
    $o1 = new O1();
    $o2 = new O2($o1);
     
    echo $o2->getData();
    ?>
    o1.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    	class O1{
    	private $data;
    	public function __construct(){
    		$this->data = "toto";
    	}
    	public function set_data($data) {
    		$this->data = $data;
    	}
    	public function get_data() {
    		return $this->data;
    	}
    }
    ?>
    o2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    class O2 {
    	private $o1;
     
    	public function __construct($o1) {
    		$this->o1 = $o1;
    	}
    	public function getData(){
    		return $this->o1->get_data();
    	}
    }
    ?>
    Attention à ne pas mettre mais juste

  8. #8
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Ahh ok donc si je comprends bien on ne met PAS le $ après le -> mais on le met après le :: lorsque c'est statique ?

  9. #9
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Tout à fait pour le $, d'ailleurs j'avais pas vu (c'est la couleur verte sûrement)

    Regardes dans le manuel php d'ailleurs (Cela pourra t'aider pour les fonctions et pour comprendre déjà la base php)

  10. #10
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Pour bien comprendre les -> et :: pour les héritages, tu as cette page sur le manuel ici

  11. #11
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Ok merci pour l'aide !

    Je travaille beaucoup avec Java en OO, et à l'époque j'avais fait beaucoup de PHP non OO.

    J'ai juste quelques soucis avec les spécificités de PHP

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

Discussions similaires

  1. Trouver un object dans une listof( object)
    Par richton95 dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/05/2009, 11h47
  2. Appel un object dans Tableau d'objects
    Par aristeas dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 22/11/2008, 22h07
  3. Comment copier un object dans un autre ?
    Par cadetill dans le forum Langage
    Réponses: 7
    Dernier message: 07/02/2008, 19h09
  4. Référence à une colonne dans un autre select
    Par vlefevre dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/01/2008, 09h48
  5. Réponses: 1
    Dernier message: 15/05/2007, 10h40

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