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 dans une méthode de ma classe


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Using $this when not in object context dans une méthode de ma classe
    Bonjour,
    J'ai un problème dans une de mes classes.
    Tout d'abord, voici son code :

    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
    <?php
    class Maintenance
    {
    	protected $_cheminVersFichierMaintenance;
     
    	[...]
     
    	public function timestampFinMaintenance()
    	{
    		$contenuFichierMaintenance = file($this->_cheminVersFichierMaintenance);
     
    		return (@$contenuFichierMaintenance[1] != 0) ? ($contenuFichierMaintenance[1]) : 'Date inconnue';
    	}
    }
    ?>


    Et il se trouve que j'ai l'erreur :
    Fatal error: Using $this when not in object context in C:\...\maintenance.class.php on line 35, ligne qui correspond à la dixième du code que j'ai posté ( $contenuFichierMaintenance = file($this->_cheminVersFichierMaintenance);).
    Je ne comprends vraiment pas pourquoi j'ai cette erreur, car j'utilise exactement la même ligne que celle qui produit l'erreur dans une autre fonction, et ça marche très bien.
    Je précise que ma classe a bien un constructeur.

    Merci de votre aide.

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    En premier essai, je dirais une erreur dans l'appareillage { et } => ta classe se terminerait juste avant la fonction.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Apparemment non.
    Je donne tout de même le code complet de ma classe, au cas où.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    class Maintenance
    {
    	protected $_cheminVersFichierMaintenance;
     
    	public function __construct($cheminVersFichierMaintenance = 'maintenance.txt')
    	{
    		if(!is_file($cheminVersFichierMaintenance)) //si le fichier indiqué n'existe pas
    		{
    			//On le crée
    			$fichier = fopen($cheminVersFichierMaintenance, 'w+');
    			fclose($fichier);
    		}
    		$this->_cheminVersFichierMaintenance = $cheminVersFichierMaintenance;
    	}
     
    	public function mettreEnMaintenance($timestampExpiration = 0)
    	{
    		$fichier = fopen($this->_cheminVersFichierMaintenance, 'w+');
    		fputs($fichier, "en maintenance \n$timestampExpiration");
    		fclose($fichier);
    	}
     
    	public function siteEnMaintenance()
    	{
    		$contenuFichierMaintenance = file($this->_cheminVersFichierMaintenance);
    		if($contenuFichierMaintenance[0] != 'en maintenance')
    			echo 'Contenu fichier : <b>'.$contenuFichierMaintenance[0]."</b> , Chaine qui à qui elle est égale : <b>en maintenance</b> non ?";
     
    		return ($contenuFichierMaintenance[0] == 'en maintenance');
    	}
     
    	public function timestampFinMaintenance()
    	{
    		$contenuFichierMaintenance = file($this->_cheminVersFichierMaintenance);
     
    		return (@$contenuFichierMaintenance[1] != 0) ? ($contenuFichierMaintenance[1]) : 'Date inconnue';
    	}
     
     
    }

  4. #4
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Bonsoir,

    J'ai testé ta classe
    et, pour moi, pas de Fatal error.

    En revanche,
    si tu appelles tes méthodes comme des méthodes de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo Maintenance::timestampFinMaintenance();
    là, tu as droit à une Fatal error.

    Evidemment,
    puisque tu as affaire à des méthodes d'objet
    que tu ne peux donc utiliser
    qu'une fois un objet instancié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $maintenance = new Maintenance();
    echo $maintenance->timestampFinMaintenance();
    Bref,
    il faudrait voir dans quel contexte
    tu utilisais ta classe
    lorsque tu as eu droit à ton erreur.

    Fred

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Ah oui en effet, j'appelais ma méthode de la façon Maintenance::methode.

    Par contre j'ai un autre problème : ma méthode siteEnMaintenance renvoie toujours false, et j'obtiens ça :

    Contenu fichier : en maintenance , Chaine qui à qui elle est égale : en maintenance non ?
    Il est bien écrit « en maintenance » dans mon fichier, mais ça ne marche pas ...

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Citation Envoyé par christophetd Voir le message
    Ah oui en effet, j'appelais ma méthode de la façon Maintenance::methode.

    Par contre j'ai un autre problème : ma méthode siteEnMaintenance renvoie toujours false, et j'obtiens ça :



    Il est bien écrit « en maintenance » dans mon fichier, mais ça ne marche pas ...
    Utilise trim() car t'as des espaces, des retours à la ligne, etc...
    Ceci marche nickel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (trim($contenuFichierMaintenance[0]) == 'en maintenance');

  7. #7
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    ma méthode siteEnMaintenance renvoie toujours false
    C'est à cause de caractères blancs dans $contenuFichierMaintenance[0]
    qui font que cette variable n'est pas exactement égale à 'en maintenance'.
    Pour supprimer ces caractères, tu peux utiliser la fonction trim().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function siteEnMaintenance()
    {
    	$contenuFichierMaintenance = file($this->_cheminVersFichierMaintenance);
    	$etat = trim($contenuFichierMaintenance[0]);
    	if($etat != 'en maintenance')
    		echo 'Contenu fichier : <b>'.$contenuFichierMaintenance[0]."</b> , Chaine qui à qui elle est égale : <b>en maintenance</b> non ?";
     
    	return ($etat == 'en maintenance');
    }
    Fred

  8. #8
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par christophetd Voir le message
    Ah oui en effet, j'appelais ma méthode de la façon Maintenance::methode.

    Par contre j'ai un autre problème : ma méthode siteEnMaintenance renvoie toujours false, et j'obtiens ça :



    Il est bien écrit « en maintenance » dans mon fichier, mais ça ne marche pas ...
    Pour la prochaine fois, merci de créer une discussion par problème. Cela facilitera la vie de la modération et la recheche des utilisateurs.

Discussions similaires

  1. NoClassDefFound pour une inner classe dans une méthode de la classe
    Par joel.drigo dans le forum Général Java
    Réponses: 4
    Dernier message: 19/07/2013, 14h40
  2. [POO] Using $this when not in object context
    Par rugueux dans le forum Langage
    Réponses: 4
    Dernier message: 26/09/2011, 14h49
  3. Using $this when not in object context
    Par kate59 dans le forum Langage
    Réponses: 6
    Dernier message: 02/09/2010, 13h54
  4. [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
  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