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] Objet en argument de fonction


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut [POO] Objet en argument de fonction


    Est ce que l'on peut passer une variable de type Objet en argument d'une fonction ?

    si oui faut il prendre des précautions particulières pour exploiter correctment l'objet ds la fonction ?

    je ne m'en sors pas et je trouve pas de référence là dessus

    Merci d'avance

    Luna

  2. #2
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    Oui bien sûr que tu peux passer des objets en paramètre, c'est même très pratique! Il n'y pas spécialement de grands risque si tes objets sont bien fait (bien utilisé les mots clé public et private).
    Moi par exemple je passe l'objet Smarty à tous les objets qui ont besoin d'afficher qqch.
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  3. #3
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Je débute doucement dans ce domaine et j'ai aussi quelques questions :
    D'abord, est-ce que vous parlez bien des paramètres des fonctions possèdant un & devant leur nom ou bien rien à voir ?
    Citation Envoyé par Yoteco
    Moi par exemple je passe l'objet Smarty à tous les objets qui ont besoin d'afficher qqch.
    Pourrais-tu m'en dire un peu plus stp ? Quels avantages tu n'obtiendrais pas autrement ?

  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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Si je ne m'abuse, tous les objets sont passés par référence. En fait j'en suis sûr pour php5 (c'est mieux mangez en... ), un peu moins pour php4. Donc le & n'est pas une nécessité.

    Et une fois que les classes sont bien faites, c'est du bonheur à maintenir.
    Je dis bien à maintenir, parce que c'est généralement plus long à mettre en place.
    Mais trop de bonheur ensuite à faire évoluer, à modifier, etc...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut
    Merci pour vos réponses, et je vous sollicite alors pour la pratique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $mavariableobjet;
    ca me renvoit "Object"

    mais si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function verifmonobjet($ent)
    {
    echo $ent;
    }
     
    verifmonobjet($mavariableobjet);
    le echo ne renvoit rien comme si il ne reconnaissait l'objet (j'ai essayé avec global mais c'est idem...)

    où est ma naïveté ds tout ça ?

    Merci de vos conseils

    Luna

  6. #6
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Par défaut
    Salut,

    J'ai pas bien compris ce que tu cherches à faire
    m'enfin voila un simple exemple :

    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
     
    <?php
    class maClasse {
    	public function sayHelloWorld () {
    		return 'hello wolrd';
    	}
    }
     
    function verif (maClasse $obj) {
    	echo $obj->sayHelloWorld();
    }
     
    $o = new maClasse ();
    verif ($o);
     
    // (out) hello wolrd
    ?>
    si ca peut t'eclairer

    sahid

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut
    Merci Sahid,

    je reprends ton code, enleve le public (je suis en php4) et voilà ce que je veux faire en trés simplifié (entre les 2 appels de fonction creatobj et updobj y a une .... de codes)

    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
     
    <?php
    class maClasse {
      function sayHelloWorld()
      {
        return "hello wolrd";
      }
    }
     
    function creatobj () {
          $myobj = new maClasse();
    }
    function updmyobj () {
      echo $myobj->sayHelloWorld();
    }
     
    creatobj();
    updmyobj();
     
    ?>
    ben à chaque fois je me prends un superbe message :

    Fatal error: Call to a member function on a non-object in /var/www/test_classe.php on line 13
    qui avec des echo me confirme qu'il perd l'objet a chaque aller retour dans une fonction

    si t'as une combine... merci d'avance

    Rémy

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut
    Merci Saïd avec ton tout petit exemple tu m'a mis sur la voie !!

    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
     
    <?php
    class maClasse {
      function sayHelloWorld()
      {
        return "hello wolrd";
      }
    }
     
    function creatobj () {
          $myobj = new maClasse();
          return $myobj;
    }
    function updmyobj ($ent) {
      echo $ent->sayHelloWorld();
    }
     
    $myobj = creatobj();
    echo $myobj;
    $myobj = updmyobj($myobj);
     
     
    // (out) hello wolrd
    ?>
    en fait il me faut retourner à chque fois l'objet et le renvoyer en argument pour que cela se porte d'une fonction à l'autre

    si y a plus malin encore je suis preneur en php4 bien sur

    Merci

    Luna

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut
    Euh... je suis calmé car en fait mes fonctions sont lancés dans le cadre d'un parser XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xml_set_element_handler($xml_parser, "creatobj", "updmyobj");
    avec ce principe impossible de renvoyer l'objet à la focntion comme précedemment

    donc comment en Php4 rendre un objet définitvement global de manière à ce qu'il soit vu de n'importe où

    Désespéré...

    Merci de votre aide

    Luna

  10. #10
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2006
    Messages : 215
    Par défaut
    peut etre dans ton cas, serialiser tes objets pourrait resoudre ton probleme

    sahid

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut
    Ca y est je crois que ce coup ci c'est le bon : sans serialize que je ne connaissais pas merci Said je retiens :

    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
     
    <?php
    class maClasse {
      function sayHelloWorld()
      {
        return "hello wolrd";
      }
    }
     
    function creatobj () {
          global $myobj;
          $myobj = new maClasse();
    }
    function updmyobj () {
      global $myobj;
      echo $myobj->sayHelloWorld();
    }
     
    creatobj();
    echo $myobj."<BR>";
    updmyobj();
     
     
    // (out)
    //Object
    //hello wolrd
    ?>
    ce que je ne m'explique pas c'est qu'il faut déclarer la variable global ds chaque fonction

    je croyais qu'une fois suffisait une fois pour toutes ?

    merci de vos commentaires

    Luna

  12. #12
    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 : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par lunab54
    ce que je ne m'explique pas c'est qu'il faut déclarer la variable global ds chaque fonction

    je croyais qu'une fois suffisait une fois pour toutes ?
    Salut,
    Et oui, tu es obligée de spécifier "global" à chaque fois.
    Parce que si tu ne le mets pas, il considère qu'il s'agit d'une nouvelle variable à portée locale dans ta fonction. Tu as trouvé les deux moyen de passer l'objet : en paramètre de fonction ou bien par variable globale.

    De toutes façons, c'est pas si long à frapper le mot "global"...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Par défaut
    effectivement c'est pas long à taper...

    la solution variable global me convient parfaitement dans mon cas à cause du parser xml qui au niveau des fonctions de début et de fin ne permet pas de passer d'argument donc pas d'objet

    enfin merci à tous

    A+

    Luna

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

Discussions similaires

  1. Fonction récursive avec objet en argument
    Par mkrzemin dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/11/2010, 18h18
  2. [POO] objet Java en paramètre d'une fonction Javascript
    Par bastouffe dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/09/2008, 16h55
  3. [POO] POO et Objet dans une sous fonction
    Par JaKoo dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2008, 03h42
  4. Réponses: 2
    Dernier message: 20/06/2007, 12h12
  5. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19

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