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 :

self:: $this-> ou $this:: static / pas static


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut self:: $this-> ou $this:: static / pas static
    Bonjour

    Dans une class j'ai un méthode toto

    Est ce que je dois obligatoirement la déclarer static ?

    Si je l'appelle depuis une autre fonction de la class dois-je l'appeller

    ou
    ou
    En local les 3 semblent marcher parfaitement bien mais chez mon hebergeur self::toto() ou $this::toto semble provoquer une erreur interne (500) !

    (je n'ai pas déclaré la fonction static)


    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
    17
    18
    19
    20
    21
    22
    <?php
    Class Montruc  {
     
     
    protected $_champs1;
    protected $_champs2;
     
    function getChamps1 () {
    return $this->$champs1;
    }
     
    function getChamps2Ameliore () {
     
    return self::ameliore($this->_champs2);
    }
     
     
    function private ameliore($texte) {
    return uc($texte);
    }
     
    }

    Est ce que dans cet exemple je DOIS déclarer ameliore en static ?
    Est ce que je dois l'appeller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self::ameliore($this->_champs2);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->ameliore($this->_champs2);
    Merci d'avance de m'éclairer

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Est ce que je dois obligatoirement la déclarer static ?
    Ca dépend si tu as besoin ou non qu'elle soit static (accessible sans instance de la classe)

    Si je l'appelle depuis une autre fonction de la class dois-je l'appeller
    self::toto();
    ou
    $this::toto();
    ou
    $this->toto();
    $this::toto(); est un non sens puisque une fonction static à vocation à être utilisé sans instance de l'objet qui l'encapsule.

    Donc si méthode static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse::maFonction();
    sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $instanceDeClasse->maFonction();
    Pourquoi devrais tu déclarer ameliore() en static ?
    J'ai l'impression que tu confond la visibilité private et le fait qu'une méthode soit static ce qui n'a absolument aucun rapport.

    Dans ton cas l'ecriture à utiliser est : $this->ameliore($this->_champs2);.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Je ne confonds pas private et static, et l'occurence la fonction n'avait pas besoin d'être publique alors je l'ai mise private.

    C'est bien une fonction qui n'a pas besoin que la class soit instanciée, mais quand je l'appelle depuis la classe elle-meme ca ne fait finalement pas de différence je devrais toujours l'appeller sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->ameliore($this->_champs2);
    Il n'y a que si j'appellais la methode (publique) depuis une autre class que j'ecrirais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass::ameliore($ca);

    Et pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self::ameliore($this->_champs2);
    provoque-t-il une erreur 500 ? Est ce par ce que je ne l'ai pas déclarée static ?

    C'est bien ça ?

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Si ta méthode est déclaré static alors tu utilises Maclasse::maFonction(); quelque soit l'endroit ou tu veux l'appeler.

    Et pourquoi
    provoque-t-il une erreur 500 ? Est ce par ce que je ne l'ai pas déclarée static ?

    C'est bien ça ?
    C'est d'abord parce que ton serveur n'est pas configuré pour affiché les erreurs (il faut que tu regarde les log d'erreur si tu veux plus d'info) et ensuite effectivement tu essai d'appeler une fonction de manière static alors qu'elle ne l'est pas

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    OK merci beaucoup pour ces éclaircissements.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/02/2015, 10h27
  2. static ou pas static ?
    Par Ivelios dans le forum Débuter avec Java
    Réponses: 15
    Dernier message: 09/09/2010, 09h05
  3. Réponses: 1
    Dernier message: 12/07/2010, 21h00
  4. [FOP] [ERROR] non-static variable this cannot be referenced from a static context
    Par cash3000 dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/05/2006, 16h46
  5. this.form.submit ne marche pas ... et pourtant
    Par misarod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/12/2005, 17h40

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