$this se trompe de class
Résolu
Stanislas Poisson
Messages postés
424
Date d'inscription
Statut
Membre
Dernière intervention
-
JooS Messages postés 2468 Date d'inscription Statut Membre Dernière intervention -
JooS Messages postés 2468 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous.
J'ai plusieurs class. on appelle un fonction de A qui doit formater un affiche suivant B
Le problème est le suivant:
Notice: Undefined property: A::$datetimezone in
donc, le $this de la class B se croit dans la class A.
Comment remédié a cela?
J'ai plusieurs class. on appelle un fonction de A qui doit formater un affiche suivant B
class A{ public function Data(){ return B::Date(); } } $systA=new A(); class B{ private $datetimezone; public SetTimeZone($a){ $this->datetimezone=$a; } public Date(){ return $this->datetimezone; } } $systB=new B(); $systB->SetTimeZone('Europe/Paris'); $systA->Data();
Le problème est le suivant:
Notice: Undefined property: A::$datetimezone in
donc, le $this de la class B se croit dans la class A.
Comment remédié a cela?
A voir également:
- $this se trompe de class
- Comment savoir si ma femme me trompe sur whatsapp - Accueil - WhatsApp
- Logiciel de classement de photos gratuit - Guide
- Hijack this - Télécharger - Antivirus & Antimalwares
- Logiciel de classement de documents gratuit - Télécharger - Bureautique
- Ouvrez cette page. dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Programmation
1 réponse
Salut !
En php, on définie une fonction avec le mot clé "function", ça m'étonne que PHP ne vous l'a pas signaler !
Quant au reste, en réalité vous vous trouver dans l'objet $systA, a travers cet objet vous avez appeler la méthode Date() dans un contexte statique, et dans cette méthode il y a th "$this", et "$this" pointe vers l'objet appelant, et non pas la classe appelante !
Donc il y a plusieurs façons d'y remédier !
1 - Héritage
2 - Travailler dans un contexte statique (l'important c'est que $datetimezone soit statique)
En php, on définie une fonction avec le mot clé "function", ça m'étonne que PHP ne vous l'a pas signaler !
Quant au reste, en réalité vous vous trouver dans l'objet $systA, a travers cet objet vous avez appeler la méthode Date() dans un contexte statique, et dans cette méthode il y a th "$this", et "$this" pointe vers l'objet appelant, et non pas la classe appelante !
Donc il y a plusieurs façons d'y remédier !
1 - Héritage
<?php abstract class A{ public function Data(){ return $this->Date(); } } class B extends A{ private $datetimezone; public function SetTimeZone($a){ $this->datetimezone=$a; } public function Date(){ return $this->datetimezone; } } $systB = new B(); $systB->SetTimeZone('Europe/Paris'); echo $systB->Data(); ?>
2 - Travailler dans un contexte statique (l'important c'est que $datetimezone soit statique)
<?php class A{ public function Data(){ return B::Date(); /* Ou $systB = new B(); return $systB->Date(); */ } } class B { private static $datetimezone; public function SetTimeZone($a){ self::$datetimezone = $a; } public function Date(){ return self::$datetimezone; } } B::SetTimeZone('Europe/Paris'); /* Ou $systB = new B(); $systB->SetTimeZone('Europe/Paris'); */ $systA = new A(); echo $systA->Data(); ?>