Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2011, 12h10   #1
Membre confirmé
 
Avatar de Général03
 
Inscription : avril 2006
Messages : 809
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 809
Points : 220
Points : 220
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 :
1
2
3
class test1 {
   static function getContenu() {}
}
2) Comment fait on pour faire hériter une classe static ?
Code :
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 !!
__________________
Mes contributions phares en dev : www.rigaudie.fr
Général03 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 12h27   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
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.

Citation:
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
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 12h35   #3
Membre confirmé
 
Avatar de Général03
 
Inscription : avril 2006
Messages : 809
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 809
Points : 220
Points : 220
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 ?
__________________
Mes contributions phares en dev : www.rigaudie.fr
Général03 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 12h39   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
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 :
1
2
3
4
static class Foo
{
 
}
Donne :

Citation:
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
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 12h40   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 12h52   #6
Membre confirmé
 
Avatar de Général03
 
Inscription : avril 2006
Messages : 809
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 809
Points : 220
Points : 220
Citation:
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...
Citation:
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 :
1
2
3
4
5
6
7
8
class test4 extends test5{
static function meth1(){}
function meth2() { $this->getMethode()}
}
 
class test5 {
function getMethode(){}
}
__________________
Mes contributions phares en dev : www.rigaudie.fr
Général03 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 12h53   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Oui.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 14h45   #8
Membre confirmé
 
Avatar de Général03
 
Inscription : avril 2006
Messages : 809
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 809
Points : 220
Points : 220
Dernière question, vaut il mieux faire
Code :
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 :
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(){}
}
?
__________________
Mes contributions phares en dev : www.rigaudie.fr
Général03 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 15h12   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
ça dépend au niveau de ton code tu, feras quoi après ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h14   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h15   #11
Membre confirmé
 
Avatar de Général03
 
Inscription : avril 2006
Messages : 809
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 809
Points : 220
Points : 220
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
__________________
Mes contributions phares en dev : www.rigaudie.fr
Général03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h33   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Composition. Voire Singleton éventuellement si ta classe de traduction ne doit avoir qu'une et une seule instance.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h40   #13
Membre confirmé
 
Avatar de Général03
 
Inscription : avril 2006
Messages : 809
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2006
Messages : 809
Points : 220
Points : 220
Merci pour vos réponses j'y vois maintenant plus clair.
__________________
Mes contributions phares en dev : www.rigaudie.fr
Général03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h11.


 
 
 
 
Partenaires

Hébergement Web