$this se trompe de class
Résolu
Stanislas Poisson
Messages postés
775
Statut
Membre
-
JooS Messages postés 2705 Statut Membre -
JooS Messages postés 2705 Statut Membre -
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();
?>