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 :

"Using $this when not in object context" alors que dans un objet [POO]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut "Using $this when not in object context" alors que dans un objet
    Bonjour,
    j'ai le message d'erreur du titre alors que je suis bien dans un objet. Où est mon erreur, SVP ?

    Code php : 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
    class Application extends JobClass
    {
    //y a bien un constructeur
     public function __construct( $sesaid, $applicationname, $platform, $platformowner, $publisher ) {
            parent::__construct( $sesaid, $applicationname ); /*pour que la propriété accepted_characters de la classe
     parente soit connue par une fille, il faut que celle-ci appelle le constructeur de la parente.*/
            self::$platform = $platform;
            self::$platformowner = $platformowner;
            self::$publisher = $publisher;
            //$this->accepted_characters_for_platform = "has forbidden characters. Please use only letters and spaces";
            $this->accepted_characters_for_application_name = "has forbidden characters. Please use only letters and underscore";
        }
    ...
     if ( !($this->validStringForApplicationName(self::$applicationname)) )
            {
    ...
    ...

    JobClass.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function validStringForApplicationName($string):bool
        {
          static public $applicationname;
          ...
          ...du code
    }

    [EDIT] j'ai rajouté la ligne 3 du code de JobClass.php pour qu'on comprenne bien le self de la ligne 14 du 1er code.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Bonjour,
    Je ne suis pas spécialiste des classes en extension mais ton $this fait-il référence à la classe JobClass ou à la classe Application?

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci de m'avoir fait une réponse. En fait, une classe fille hérite de tous les attributs et méthodes de la classe mère ayant l'attribut public ou protected (pour en être sûr, je viens de relire la théorie (chez un concurrent et donc la variable $this est un référent aussi bien pour la classe fille que pour la classe mère.
    Pour en être sûr, j'ai transféré la méthode validStringForApplicationName dans la classe Application mais le message d'erreur est resté le même .

  4. #4
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Bonjour,

    Avec ce bout de code difficile de voir quoi que ce soit,

    A quoi sert le static public $applicationname; dans ta méthode ? Qui plus est devrait générer une erreur

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Merci de t'intéresser au sujet.

    Par manque de dispo, je ne peux répondre que maintenant...

    Je n'ai pas donné beaucoup d'info, car je n'avais pas jugé ça utile.

    En fait, une responsabilité de la classe Application est de tester la validité de plusieurs paramètres liés à une application. Comme plusieurs classes ont cette responsabilité, j'ai créé une classe mère (et abstraite) JobClass qui possède des attributs et des méthodes communs.

    Le static public $application_name; est l'un des attributs communs (pour toutes les classes chargées de tester la validité de paramètres, si une erreur est détectée, on doit préciser dans le message d'erreur le nom de l'application concernée).
    Ici, cette variable a un 2e rôle : la classe Application doit tester la validité de ce paramètre. C'est justement là que se situe le problème décrit au post #1. L'appel de la méthode de la classe JobClass est fait ligne 14 du 1er code et c'est sur le $this que l'erreur est signalée.

    Ai-je donné suffisamment d'infos ?

    Et pourquoi ça aurait dû générer une erreur ?

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Ai-je donné suffisamment d'infos ?
    Ben, non
    Je viens de comprendre : on est dans une méthode statique (et je l'avais pas dit) et du coup, la variable $this n'existe pas...Il me reste à faire autrement et je vais y travailler.

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

Discussions similaires

  1. [POO] Using $this when not in object context
    Par rugueux dans le forum Langage
    Réponses: 4
    Dernier message: 26/09/2011, 14h49
  2. Using $this when not in object context
    Par kate59 dans le forum Langage
    Réponses: 6
    Dernier message: 02/09/2010, 13h54
  3. [PHP 5.0] [POO] Using $this when not in object context
    Par Gaetch dans le forum Langage
    Réponses: 10
    Dernier message: 06/03/2010, 11h35
  4. Réponses: 7
    Dernier message: 16/07/2009, 08h13
  5. Fatal error: Using $this when not in object context
    Par lavande dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2008, 20h17

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