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] Adresser une classe


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut [POO] Adresser une classe
    Bonsoir,

    Je reprends un site existant que je vais schématiser comme suit....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                     <-      Claisse Maitre instanciée par du PUR html        
    HTML  ===> <========+====+=======+ .................................... >
                     A       B       C
    Sous-classes A,B,C.... etc
    Le Master s'occupe de tout, des émails, des interceptions des erreurs, du dispatch vers chaque sous classes qui souvent représentes une table MYsql.
    En dessous; il y a deux classes Sql et Environ.

    Si de mon HTML, j'écris $Master->init() et init est une méthode de A (mais pas d'une autre sous-classe), cela fonctionne !
    Dans Maitre A et Z sont instanciées de la même manière PTR_A ou PTR_Z = new classA() ou classZ()

    Mais si j'écris - car je souhaite adresser la classe A au lieu de Z qui aurait peut être la même méthode (mais ce n'est pas le cas), je pensais que l'écriture suivante aurait levé l'incertitude que PHP pourrait avoir... donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $Res = $Master->classZ->get()
    Il n'y a pas d'équivoque, la méthotde get appartient à la classe Z uniquement !
    J'ai des erreurs d'interpretation de PHP, comme dois-je écrire ma requête ?

    Merci à tous

    PS: Je précise que c'est HTML qui instancie le Mader
    Chaque page possède sa partie d'HTML, donc l'intatitation vient de là !!

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    J'ai pas compris grand chose à ton poste mais je vais tenter une réponse.

    Si tu as une classe A qui instancie une classe B et que tu veux accéder à une méthode de B à travers A tu dois procédé ainsi :

    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
    classA
    {
       public function initB()
       {
           b = new classB;
           return b;
       }
    }
     
    classB
    {
    	public function methodeB()
    	{
    		echo 'Je suis B';
    	}
    }
     
    $obj = new classA();
    $obj->initB()->methodeB();
    Par contre y'a des chose pas clair dans ton post, qu'entend tu par "adresser une classe" ?
    Comment une classe peut elle être instanciée par de l'html ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut OOP Parent =<<> enfnat ??????
    Merci pour ta réponse.
    Le projet que j'ai repris est développé en dream... càd que les formes doivent être démontrables rapidement.
    Instancier une classe Maitre en HTML est facile

    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
    <HTML>
    .....
    <BODY>
    <?php
    class Master
    {    
    
    function __construct()
          { echo "hellp; I'm the master" }
    
    // Voir + bas
    // ========
    $message = new Message() :
    $iter       = new Iter() ;
    $screen  = new Screen() ;
    $session = new Session() ;}
    
         $PTR_Master = new Master() ;
    
    tu peux adresser une propriétés ou méthode via ce pointeur;
    
          $PTR_Master->abc() ou toto ;
    ?>     
    .......
    </BODY>
    </HTML>
    Mais Master instancie toutes une série de classe par ex!

    $message = new Message() :
    $iter = new Iter() ;
    $screen = new Screen() ;
    $session = new Session() ;

    Mon problème est le suivant, quoique ce n'est pas le cas pour l'instant mais comme je ne suis pas seui sur ce projetn je veux prendre mes précautions.
    Dans ce contexte, il est possible que 2 rédacteurs utilisent le même nom de méthode..... (pas de commentaire !)
    Y a t'il une syntaxe qui autorise (a supposer que je rédige message et iter)
    l'écriture suivante:

    $PTR_Master->Message->ma_méthode()_moi() ;

    ou peut être (je suis entrain de lire et lire...... mais ne trouve pas quoique j'ai vu un chapitre invoquant cette écriture mais je mme suis endormi dessus....)

    $PTR_Master!::Message->ma_méthode()_moi() ;

    Le nom de la méthode vient s'intercaller pour lever toute ambiguité.

    Est-ce + clair ainsi ?

    Merci d'avance.

  4. #4
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut PHP5 OOP PArent <==> Enfant
    Compléments d'infos suite à mes qlques tests !

    Le notation par :: ou nom de la classe est invalide.
    Le seul turnaround trouvé est le suivant:

    Dans Master tu déclares (en short) toutes les méthodes que tu as besoin dans une classe instanciées par master...
    Ex:

    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
     
    class Master
    {    function __ construct()
          { ...... }
     
          $message = new Messsage (...)
          { .... }
     
    //    Méthode de message
    //    ================
          function SetMsg($msg)
          {   return( $this->message->SetMsg($msg) ) ; }
     
          function GetMsg()
          {   return( $this->message->GetMsg() ) ; }
    }
    Dans mon code PHP de ma page HTML, je peux maintenant écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <HTML>
    .......
    <BODY>
        $Ptr_Master = new Master(...) ;
     
        $Ptr_Master->message->GetMsg() 
        ou bien;
        $Ptr_Master->GetMsg()
    ;


    Je ne suis pourtant pas certain de ma solution et préférerait que celle-ci soit validée par une autre persone car je viens de voir dans mon code la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Master->member->isrt_member()
    Qui est l'insertion d'un membre via la classe member.....

    A revoir et @valider.....

    Merci

    C'est vrai, il y a un peu de redondance mais c'est peut être el prix de la sécurité !

    Sauf grosse erreur de ma part, évidement......

  5. #5
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut ERREUR de ma part.... OOP Parent <==> Enfant
    J'ai cru que.... mais non !

    La syntaxe suggèrée dans mon post précédent est incorrecte, càd:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $Master-iter->Getiter() ; ne fonctionne pas
     
    Mais bien:
     
    $Master->GetIter()....
    Prudence au nom de méthode duplicié !

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    J'ai l'impression que tu ne comprend pas bien ce que tu fais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Master-iter->Getiter();
    C'est une erreur de frappe ou tu utilise réellement le - et non pas -> ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Master->iter->Getiter() ;
    Sous entends que ta class Master à un attribut public "iter" et que cet attribut publique est un objet de la classe Iter (ou quelque soit son nom mais une classe qui à la méthode Getiter() )

    La tu appelle simplement une méthode GetIter de ta classe master.

    Peut être que la (re)lecture de quelques cours de poo te serais utile. notamment au niveau de ton code ou tu mélanges php4 et 5
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le projet que j'ai repris est développé en dream... càd que les formes doivent être démontrables rapidement.
    Instancier une classe Maitre en HTML est facile
    Dévelloper en dremweaver ou autrement c'est pareil si mon met de coté le code dégeulasse que produit DW.

    Je t'avoue que j'ai un peu de mal à comprendre ce que tu veux faire. Pour ta classe master ou est l'intéret de doubler les méthodes de message par exemple ?

    Je ferais plutôt cela comme ça :

    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
     
    class Master
    {    
    	protected $message
    	public function __construct(){
    		$this->message = new Message;
    	}
     
    	/**
    	* Récupère l'objet message
    	* @return Message $message
    	*/
    	public function getMsg()
    	{
    		return $this->message;
    	}
     
    	public function autre()
    	{
    	     //tu peux aussi accéder au méthode de message ds ta classe master
                 $this->message->SetMsg();
    	}
    }
     
    class Message
    {
    	public function __construct(){
     
    	}
     
    	public function SetMsg()
    	{
    		//Code 
    		// PAr exemple insertion de message ds la bdd
    	}
     
    	public function GetMsg()
    	{
    		//Code de récupération du message
    	}
    }
     
    $Ptr_Master = new Master;
    $Ptr_Master->getMsg()->SetMsg(); // VA écrire ton message en passant par master
    $Ptr_Master->getMsg()->GetMsg(); // Va récupérer un message en passant par master
    Attention cependant , une classe master qui charge plein d'objet n'ayant aucun rapport entre eux n'a aucun intérêt. Faire une classe et y fourrer tout ce qui nous passe par la tête n'est pas vraiement le but de la POO
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [POO] POO pour une classe PDO
    Par nabab dans le forum Langage
    Réponses: 2
    Dernier message: 07/08/2007, 23h58
  2. Réponses: 3
    Dernier message: 27/04/2007, 14h51
  3. [POO] Compléter une classe existante
    Par poukill dans le forum C++
    Réponses: 5
    Dernier message: 07/03/2007, 13h28
  4. Réponses: 5
    Dernier message: 15/08/2006, 10h40
  5. [POO] Ecrire une classe descendante
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 14/10/2005, 19h04

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