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 :

Méthode non statique du parent appelée dans une méthode statique [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Méthode non statique du parent appelée dans une méthode statique
    Bonjour,

    J'avais une méthode getListeDiplomesEnsfea() que j'avais créée simplement dans une classe Diplome héritant d'une classe Modele :
    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
    class Diplome extends Modele
    {
     
    	/**
    	 * diplome.getListeDiplomesEnsfea
    	 * @abstract : Donne la liste des diplômes délivrés par l'ensfea
    	 * @return : array Liste des diplômes
    	 */
    	public function getListeDiplomesEnsfea()
    	{
    		$sql = "
    			SELECT diplomeId, diplomeLibelle
    			FROM v_diplome_ensfea
    			ORDER BY diplomeLibelle
    		";
     
    		$result = $this->executerRequete($sql);
    		return $result;
    	}
    No problem.

    Puis je me suis dit que je n'avais peut-être pas besoin d'instancier un objet Diplome pour avoir la liste des diplômes alors j'ai voulu passer la méthode en static :
    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
    	/**
    	 * diplome.getListeDiplomesEnsfea
    	 * @abstract : Donne la liste des diplômes délivrés par l'ensfea
    	 * @return : array Liste des diplômes
    	 */
    	public static function getListeDiplomesEnsfea()
    	{
    		$sql = "
    			SELECT diplomeId, diplomeLibelle
    			FROM v_diplome_ensfea
    			ORDER BY diplomeLibelle
    		";
     
    		$result = parent::executerRequete($sql);
    		return $result;
    	}
    Et là, j'obtiens cette erreur :
    Strict Standards: Non-static method Application\Controller\Modele::executerRequete() should not be called statically
    Apparemment, je ne peux pas appeler une méthode non statique du parent dans une méthode statique.

    Cette idée m'est venue parce que j'utilise une autre méthode du même genre en Ajax et je trouve un peu idiot d'instancier un objet diplome que je n'utilise finalement pas pour autre chose que d'exécuter une méthode ramenant une liste de trucs en rapport avec les diplômes.

    Quelle serait la bonne manière de faire ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 724
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 724
    Par défaut
    si la méthode "executerRequete" n'est pas statique c'est qu'elle a peut-être besoin d'être appelée à une instance de Modele.
    il faudrait voir le code de cette méthode pour étudier ce qu'il est possible de faire.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Par défaut
    Bonjour CinePhil,

    En faisant une recherche par rapport à votre question, je suis tombé sur le post suivant :

    https://stackoverflow.com/questions/...-of-same-class

    Selon une des réponses, il serait possible d'appeler votre méthode non statique executerRequete depuis une méthode statique en remplaçant la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = parent::executerRequete($sql);
    par la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = (new self)->executerRequete($sql);
    Ce qui revient à créer une instance de la classe où on se trouve, d'où la possibilité d'appeler depuis cette instance une méthode non statique.

    Cependant, je n'ai pas testé. J'espère que ça marche.

    Bonne soirée.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    J'ai prolongé ma réflexion et j'ai finalement créé une classe DiplomeEnsfea qui hérite de Diplome et qui contient des propriétés spécifiques et les méthodes de Diplome que j'ai déplacées dans DiplomeEnsfea.
    Je pense que je vais en rester là.

    Merci pour vos réponses.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/11/2015, 08h32
  2. Réponses: 2
    Dernier message: 08/07/2015, 09h06
  3. Appel d'une méthode Java après fin d'exécution d'une procédure stockée
    Par ishika83 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 18/08/2014, 15h40
  4. Désactiver le cache sur une méthode d'un service WCF appelée depuis une page ASPX
    Par zar dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 18/03/2009, 09h41
  5. Réponses: 10
    Dernier message: 10/12/2006, 16h26

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