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] Erreur à l'utilisation de la variable $this


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut [POO] Erreur à l'utilisation de la variable $this
    j'utlise une solution xampp (PHP Version 5.1.6),apparement il y a des gens sur le net qui disent que c un bug de php mais y aurait'il qqun ici pour m'aider a trouver la source du probleme svp?

    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
    42
    43
    44
    45
    46
    47
    <?php
    class Items {
       static private $instance=false;
       private $Collection=false;
     
     
        // Ajouter un item dans la colection
    	public function AddItem($item, $key){
    		$Collection[$key] = $item; 
    	}
     
    	// Recuperer un item grace a son nom
    	public function GetItem($key){
    		if(Items::set($this->Collection, $key)){
    			return current($this->Collection);
    		}
    		else{ return "Error0";}
    	}
     
    	//fonction set qui sert a se positioner dans la collection
    	private function set($Collection, $key){
        	reset($Collection);
    	    while($current=key($Collection)){
    		   if($current==$key)
    		   {
    			   return true;
    		   }
    		   next($Collection);
    	   }
    	   return false;
    	 }	
     
       // le constructeur est privé, pour empêcher qu'il soit directement instancié 
       private function __construct() {
          $this->Collection = array();       
       }
     
       // méthode statique pour créer une instance de la classe Multilingue
       static function instance() {
           if(!Items::$instance) {
               Items::$instance = new Items();
           }
           return Items::$instance;
       }
    }
     
    ?>
    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
    include 'Items.php';
     
    $I = Items::instance();
    Items::AddItem("test", "key1");
    Items::AddItem("test2", "key2");
    Items::AddItem("test3", "key3");
     
    $A = Items::GetItem("key1");
    $B = Items::GetItem("key2");
    $C = Items::GetItem("key3");
     
    echo $A + ";" + $B + ";" + $C + ".";
     
    ?>

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Pour moi AddItem et GetItem ne sont pas des méthodes statiques, elles doivent être appelées sur une instance de la classe.

  3. #3
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    AddItem ne retourne pas d'erreur, l'ereur se produit a l'appel dela fonction set()

  4. #4
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    ici il disent que c un bug de php mais je sait pas comment metre a jour php de xampp
    http://bugs.php.net/bug.php?id=24403

  5. #5
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par rib
    AddItem ne retourne pas d'erreur, l'ereur se produit a l'appel dela fonction set()
    Le problème que ça me pose est surtout d'ordre logique : comment ajoute-t-on un item à un objet qui n'est pas défini ? C'est une autre manière de dire qu'on ne peut pas utiliser $this en-dehors d'une instance.

    Pour moi PHP aurait dû t'empêcher d'appeler AddItem.

    Citation Envoyé par rib
    ici il disent que c un bug de php mais je sait pas comment metre a jour php de xampp
    http://bugs.php.net/bug.php?id=24403
    Je n'ai pas l'impression que ça soit le même problème (mais je peux me tromper)

  6. #6
    rib
    rib est déconnecté
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    comment sa pas definit?

  7. #7
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    t'as testé avec $I->AddItem au lieu de Items::AddItem ?
    pareil pour get
    Dia [ Page DVP ] [ Site pro ]

  8. #8
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par rib
    comment sa pas definit?
    quand tu appelles Items::AddItem(...), tu n'appelles pas la méthode d'une instance, tu appelles une méthode statique d'une classe (ce qui n'est pas le cas). La méthode n'est pas mise en relation avec une instance (donc, pas de $this).
    Je pense qu'il faudrait que tu fasses :

Discussions similaires

  1. [POO] Erreur : utilisation Event
    Par TheReturnOfMuton dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/05/2008, 11h43
  2. [POO] Erreur lors de l'utilisation de $this en PHP5
    Par Ekimasu dans le forum Langage
    Réponses: 4
    Dernier message: 03/11/2006, 20h21
  3. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23
  4. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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