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] Héritage multiple Parent


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut [POO] Héritage multiple Parent
    Salut,

    je suis sur un projet d'école en PHP5, je n'y connai pas grand chose en language Objet, mais j'ai de bonne connaissance en PHP.

    Voici mon problème actuel :

    J'ai 3 classes :

    - Class template template.class.php
    - Class Appli appli.class.php
    - Class User user.class.php

    Dans la classe Appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function __construct()
    	{
    	$this->template = new template();	
    	$this->user  	= new user();
    	}
    Maintenant je souhaite dans la classe User, utilisé des fonctions de la classe template :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function affichFormLogin()
    	{
    	$this->template->tpl_assign("login","$fomulaire");
    	}
    Cela ne fonctionne pas...

    Comment puis je faire.
    Et pouvez vous me donner éventullement un exemple, ou un lien vers un cour, sur le PHP5, j'ai vu beaucoup de choses, mais rien de trés structuré...

    Merci de votre aide.
    Damien.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Il manque des informations.
    Comment sont liés Template et User ?
    Est-ce que le Template et le User connaissent l'appli à laquelle ils appartiennent ?

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Comment sont liés Template et User ?
    Template et user sont lié par la classe appli enfait.

    Est-ce que le Template et le User connaissent l'appli à laquelle ils appartiennent ?
    C'est à dire?

    Désolé vraiment, mais je suis nouveau né dans l'objet...

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Si tu souhaites vraiment faire de l'héritage multiple, il va te falloir trouver une autre solution car je ne crois pas que PHP le permette (même en version 5).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Ah ça c'est dommage...

    Sinon je vais devoir instancié dans user un nouveau template... a chaque fois que j'utilise cette classe.. Je pense qu'il y a mieu à faire quand même..

    mais merci des infos

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par djshaker
    Comment sont liés Template et User ?
    Template et user sont lié par la classe appli enfait.
    Donc si je résume, une appli possède un lien vers un template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       $this->template = new template();
    et un lien vers un user
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       $this->user     = new user();
    Donc dans l'état actuel des choses, un user n'a pas de lien vers l'appli un template n'a pas de lien vers l'appli.
    User et Template vivent leur petite vie tranquille chacun de leur côté quelque peu coupés du monde, seule Appli les connait.
    Comment veux-tu que user puisse communiquer avec template si ils ne se connaissent pas ?

    Tu as deux solutions :
    1. Tu donnes à user une visibilité sur le template. (couplage fort)
    2. Tu donnes à user une visibilité sur l'appli. (couplage faible)

    pour donner la visibilité, il suffit de passer l'objet en question en parametre de constructeur...

    Je te conseille de t'orienter vers des cours de conception OO de manière générale. PHP5 n'est qu'un outil.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    C'est pas faux...

    Je vois ce que tu veux dire, en effet c'est assez logique.

    Aurais tu connaissance d'un site expliquant de façon clair et detaillé le language objet? avec quand même de préférence une application PHP.

    Un tutorial ..

    Merci beaucoup.
    Il est pas évident de s'y mettre sans avoir eu de cours, c'est assez décourageant..

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Si je peux me permettre.. ce qui est pénible dans les cours sur le language objet que l'on trouve sur le web, c'est que l'on a pas ce que la théorie donne au niveau coding..

    C'est déconcertant, on ce retrouve avec une masse de mots complexe, de concepts et on vois pas concrétement à quoi il servent...

    Un site se différenciant des autres pour avoir ce genre d'exemple?

  9. #9
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, si tu veux appeler une fonction d'une autre classe, tu peux utiliser l'opérateur :: (PHP5)
    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 MyClass  {
       public function myFunc() {
           echo "MyClass::myFunc()<br>";
      }
    }
     
    class OtherClass {
       public function myFunc() {
         MyClass::myFunc();
         echo "OtherClass::myFunc()<br>";
      }
    }
     
    $class = new OtherClass();
    $class->myFunc();
    ?>
    Ce petit code affiche
    MyClass::myFunc()
    OtherClass::myFunc()
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par Nesmontou
    Salut, si tu veux appeler une fonction d'une autre classe, tu peux utiliser l'opérateur :: (PHP5)
    Oulah!
    Cet opérateur n'est pas innocent et le mettre dans les mains d'un novice n'est pas forcément la meilleure chose à faire...

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Alors la plupart des liens j'ai déjà vu en effet, le tutorial de hachesse, étant celui qui me parle le plus.

    Sinon pour les :: j'ai vu en effet ceque cela donne, et cela va m'aider, même si je suis conscient que c'est assez dangeureux, vu que cela fais des liens entre les objets, liens symbolique... si je puis dire.. j'imagine qu'il faut utilisé cela avec parcimonie?

    Je continu mon chemin de croix vers le tout objet.

    Merci beaucoup de votre aide à tous, on se sent moin démuni d'un coup

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par djshaker
    j'imagine qu'il faut utilisé cela avec parcimonie?
    Carrément pas du tout !
    On ne l'utilise pas avec parcimonie, on l'utilise en connaissance de cause.
    Citation Envoyé par La doc
    fournit un moyen d'accéder aux membres statiques ou constants ainsi qu'aux éléments redéfinis par la classe

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    lol Ok donc du coup j'utilise.

    Alors un point logique, mais je dois m'y prendre une fois de plus mal :

    Dans user.class.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template::tpl_assign("login",$login);
    Dans template.class.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function tpl_assign($var_tpl,$var_php){
    return $this->assign($var_tpl,$var_php);
     }
    la classe template ayant un extend vers la classe Smarty.

    Et donc erreur :
    Call to undefined method user::assign()
    Alors je comprend bien ce qui se passe, quel est le problème mais j'ai aucune idée de comment le résoudre...

  15. #15
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Bien fait. Tu n'as qu'à pas utiliser ::
    Une option de facilité à un instant t peut se transformer en source d'embêtements à l'intant t'

    :: te permet d'acceder à une méthode statique. Une méthode statique étant une méthode de classes (à la différence d'une méthode d'instance). Or $this faire référence à l'instance appelée et une méthodes de classe par définition ne peut acceder à l'instance appelée puisque c'est une classe.
    Je schématise, je vulgarise, je fais surement des erreurs, mais le principe y est.

    Donc au risque de me répeter, au vu des éléments en notre possession, j'aperçois deux solutions :
    1. Tu donnes à user une visibilité sur le template. (couplage fort)
    2. Tu donnes à user une visibilité sur l'appli. (couplage faible)

  16. #16
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Petite correction à ce que j'ai dit, utilises les :: (comme dans mon exemple) pour les méthodes et variables de classe (d'ailleurs j'ai oublié de mettre des static )

    Dans ton cas, suis les indications de Mr N. qui a d'ailleurs raison de t'inciter à lire des tutos sur le POO
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/12/2008, 17h41
  2. Réponses: 4
    Dernier message: 05/06/2008, 23h20
  3. Réponses: 7
    Dernier message: 16/06/2006, 11h09
  4. [POO]héritage du constructeur de la classe parente
    Par new_wave dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2006, 14h25
  5. [Choix de langage] POO pour de multiples applications
    Par Shadowritter dans le forum Langages de programmation
    Réponses: 15
    Dernier message: 17/01/2005, 15h42

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