Modérateur PHPfrance |
2575 Messages
01 avr. 2011, 11:31
Bonjour,
L'appel des méthodes que tu fais sous la forme "class::méthode" est un appel statique où la classe et la méthode doivent être statiques. De ce fait, on n'a pas besoin d'instancier la classe en créant un objet avec New.
L'appel sous la forme "objet de class->méthode" est un appel dynamique via une instance d'objet créée par New. C'est ce dernier qui doit être utilisé normalement quand tu utilises la référence dynamique "$this" dans le code de la classe alors que l'usage statique exige la référence statique "self".
Formalisme:
$this->membre : référence dynamique à un membre (propriété (variable) ou méthode (fonction))
self::$propriété : référence statique à une propriété (variable)
self::méthode() : référence statique à une méthode (fonction)
Voici la forme correcte:
<?php
class AA{
public function AAb(){
return 'AAb';
}
public function AAc(){
return $this->AAb(); // appel de la méthode AAb() par $this (utilisable en cas d'instanciation de la classe)
}
}
// instanciation de la classe AA
$AA = new AA();
echo $AA->AAc(); // appel de la méthode AAc() de la classe AA via l'objet $AA
?>
Et l'autre:
<?php
class BB {
public $bb = '';
public function BBb(){
$this->bb = 'AAb'; // affectation de la propriété bb par $this (utilisable en cas d'instanciation de la classe)
return $this->bb; // retourne la valeur de bb modifiée
}
public function BBc(){
return $this->BBb(); // appel de la méthode BBb() par $this (utilisable en cas d'instanciation de la classe)
}
}
// instanciation d'un objet de la classe BB
$BB = new BB();
echo $BB->BBc(); // appel de la méthode BBc() de la classe BB via l'objet $BB
?>
Voici la version d'usage d'une classe en mode statique:
<?php
class BB {
static $bb = ''; // propriété statique destinée à un usage statique de la classe (sans instanciation)
public function BBb(){
self::$bb = 'AAb'; // affectation de la propriété statique bb par self (utilisable en cas de non instanciation de la classe)
return self::$bb; // retourne la valeur de bb modifiée
}
public function BBc(){
return self::BBb(); // appel de la méthode BBb() par par self (utilisable en cas de non instanciation de la classe)
}
}
// usage des membres statiques de la classe BB sans instancier la classe par un NEW
echo BB::BBc(); // appel de la méthode statique BBc()
// ou
echo BB::$bb; // affichage de la propriété statique $bb
?>
Remarque: La propriété $bb de la classe BB est déclarée statique avec le modificateur "static" et ne doit être publique car l'accès à cette propriété par les programme va se faire en mode statique via la classe avec le formalisme suivant:
- self::$bb dans la classe elle-même
BB:$bb hors de la classe dans un autre programme qui utilise la classe statique.
Et même raisonnement pour les méthodes (fonctions) statiques.
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène