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 :

Questions héritage class static [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut Questions héritage class static
    Bonjour,

    1) lorsque j'ai une classe avec une méthode static :
    Ma classe entière test1 est considérée static ? Ou seulement la méthode getContenu() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class test1 {
       static function getContenu() {}
    }
    2) Comment fait on pour faire hériter une classe static ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class test1 extends test2 {
       static function getContenu() {
         $this->methodeTest2() ; // Erreur forcément c'est une méthode static !!
       }
    }
     
    class test2 {
    function methodeTest2() {}
    }
    Merci pour ces questions totalement théorique !!

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 252
    Points : 8 542
    Points
    8 542
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Général03 Voir le message
    1) lorsque j'ai une classe avec une méthode static :
    Ma classe entière test1 est considérée static ? Ou seulement la méthode getContenu() ?
    Seulement la méthode.

    2) Comment fait on pour faire hériter une classe static ?
    Une classe n'est jamais statique, seules les méthodes peuvent l'être.

    Petite particularité pour le statique et selon les versions de PHP, regarde la doc :
    http://fr2.php.net/manual/fr/language.oop5.static.php
    http://fr2.php.net/manual/fr/languag...c-bindings.php

  3. #3
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Citation Envoyé par Sèb.
    Une classe n'est jamais statique, seules les méthodes peuvent l'être.
    Alors ceci veut dire quoi ?2) Comment fait on pour faire hériter une classe static ?
    Une classe static peut elle avoir un parent non static ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 252
    Points : 8 542
    Points
    8 542
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Alors ceci veut dire quoi ?2) Comment fait on pour faire hériter une classe static ?
    T'as un exemple de déclaration de classe statique fonctionnelle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static class Foo
    {
     
    }
    Donne :

    Parse error: syntax error, unexpected T_CLASS, expecting T_PAAMAYIM_NEKUDOTAYIM in C:\dev\www\Tests\static.php on line 3
    PHP 5.3.3

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je crois que tu as confondu static avec abstract: une classe dont une (ou plusieurs) méthodes sont statiques reste instanciable, elle n'a pas besoin de mot clé supplémentaire contrairement à une classe dont une (ou plusieurs) méthodes sont abstraites, dans ce cas, la classe elle-même doit être abstraite et n'est plus instanciable.

    Si tu veux une "classe statique", comme une classe de service par exemple, ça ressemblerait à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MaClasseStatique {
      protected function __construct () {
         throw new BadMethodCallException('Illegal call of ' . __METHOD__);
      }
     
      public static function sayHelloToPeter() { echo "Hello Peter"; }
    }
    Le constructeur est protégé, ce qui empêche de faire Et il lève une exception s'il est invoqué par une classe fille en utilisant Ce type de procédé se retrouve fréquemment dans le pattern Singleton.

  6. #6
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    T'as un exemple de déclaration de classe statique fonctionnelle ?
    J'avais vu ça sur le web mais en effet ca marche pas ! Et en effet Benjamin Delespierre j'ai fais un pti mélange de abstract et static dans ma tête...
    Je crois que tu as confondu static avec abstract: une classe dont une (ou plusieurs) méthodes sont statiques reste instanciable
    Donc un truc de ce genre serait envisageable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class test4 extends test5{
    static function meth1(){}
    function meth2() { $this->getMethode()}
    }
     
    class test5 {
    function getMethode(){}
    }

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 252
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 252
    Points : 8 542
    Points
    8 542
    Billets dans le blog
    17
    Par défaut
    Oui.

  8. #8
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Dernière question, vaut il mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class test4 extends test5{
        static function meth1(){}
        function meth2() { 
           $this->getMethode()
        }
    }
     
    class test5 {
        function getMethode(){}
    }
    ou
    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 test4 {
        private $_instance ;
        static function meth1(){}
        function __construct() {
           $this->_instance = new test5();
        }
    
        function meth2() { 
           $this->_instance->getMethode();
           $this->getMethode();
        }
     
    class test5 {
        function getMethode(){}
    }
    ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    ça dépend au niveau de ton code tu, feras quoi après ?

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    L'héritage suit une règle simple: il ne doit se faire que si la classe fille satisfait la condition "est un espèce de." Par exemple, une voiture est une espèce de véhicule donc la classe Voiture peut hériter de Vehicule.

    Comme disait mon prof de Java, "ce n'est pas parce que le chien pisse sur le poteau qu'il est une espèce de poteau." Dans les cas ou un héritage n'est pas possible, il faut lui préférer une composition.

  11. #11
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    En faite ma classe test5 correspond à un objet de traduction et je dois pouvoir l'appeler dans mes autres classes à chaque fois que j'ai du texte

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Composition. Voire Singleton éventuellement si ta classe de traduction ne doit avoir qu'une et une seule instance.

  13. #13
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Merci pour vos réponses j'y vois maintenant plus clair.

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

Discussions similaires

  1. Classe static et héritage
    Par koyot3 dans le forum C#
    Réponses: 14
    Dernier message: 29/05/2014, 01h27
  2. question sur les classes "static"
    Par Asmod_D dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2009, 17h27
  3. [Info] variable d'une classe static
    Par romdelf dans le forum Langage
    Réponses: 21
    Dernier message: 06/12/2005, 15h08
  4. Question sur les statics et les structures
    Par Steph12 dans le forum C
    Réponses: 3
    Dernier message: 24/03/2005, 13h20
  5. Pb accès entre 2 classes static
    Par d.w.d dans le forum C++
    Réponses: 5
    Dernier message: 23/02/2005, 19h05

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