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 :

[POO] Using $this when not in object context


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut [POO] Using $this when not in object context
    Bonjour j'ai une erreur "Using $this when not in object context" dans ce bout de code et je ne comprend pas (la ligne concernée est en gras) :
    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
    <?php
    	class TemplateEngine
    	{
    		private $template;
    		private $variables;
    	
    		public function __construct($template)
    		{
    			$this->template = addslashes($template);
    			$this->variables = array();
    		}
    
    		public function addVariable($variable, $content)
    		{
    			$this->variables[$variable] = $content;
    		}
    
    		...
    	}
    ?>
    Je suis bien dans un "contexte objet", j'ai bien instancié mon tableau dans le constructeur, qu'est-ce qui cloche ?

  2. #2
    Membre chevronné
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Par défaut
    je crois que private $template; est en contradiction avec ton constructeur, il y a double emploi.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut
    Même en enlevant la ligne "// $this->variables = array();" j'obtiens toujours la même erreur. Et ça veut dire quoi double emploi ? On peut pas instancier un membre de la classe dans son constructeur ?

  4. #4
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    montre nous comment tu utilises cette classe pour avoir cette erreur

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut
    Voici la classe en entier :

    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
     
    <?php
    	class TemplateEngine
    	{
    		private $template; // Fichier template à utiliser, contenant les variables à substituer.
    		private $variables; // Tebleau associatif qui contiendra les variables et les valeurs à leur substituer.
     
    		public function __construct($template)
    		{
    			$this->template = addslashes($template);
    			// $this->variables = array();
    		}
     
    		// Ajouter une nouvelle variable à substituer.
    		public function addVariable($variable, $content)
    		{
    			$this->variables[$variable] = $content;
    		}
     
    		// Affiche la page 
    		public function outputModifiedPage()
    		{
    			if (file_exists($this->template))
    			{
    				// Récupération du contenu du template.
    				$modifiedPage = file_get_contents($this->template);
    				// Parcours du template et substitution des variables.
    				foreach ($this->variables as $variable)
    				{
    					$modifiedPage = preg_repalce('#${'.$variable.'}#', $this->variables[$variable], $modifiedPage);
    				}
    				echo $modifiedPage;
    			}
    			else throw new Exception('Le fichier '.$template.' n\'existe pas');
    		}
    	}
    ?>
    Voici le fichier php qui l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php 
    	require('templateEngine.php');
    	$page = new TemplateEngine('default.tpl');
    	$page::addVariable('description', 'Page de test');
    	$page::addVariable('keywords', 'php, test, template');
    	$page::addVariable('charset','utf-8');
    	$page::addVariable('language','fr');
    	$page::outputModifiedPage();
    ?>
    Et juste au cas où voilà le fichier default.tpl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    	<head>
    		<meta name="Author" content="{$author}"/>
    		<meta name="Description" content="{$description}"/>
    		<meta name="Keywords" content="{$keywords}"/>
    		<meta http-equiv="Content-Type" content="text/html;charset={$charset}"/>
    		<meta http-equiv="Content-Language" content="{$language}"/>
    	</head>
    	<body>
    	</body>
    </html>
    En gros ce que c'est sensé faire vous l'aurez compris c'est remplacer les variables entre {$...} par les valeurs dans le fichier php.

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut
    En remplaçant les :: par des -> dans le fichier php ça fonctionne. Quelqu'un pourrait m'éclairer sur quand utiliser l'un ou l'autre ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2014, 09h33
  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. 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