Voici un petit exemple pour bien comprendre ce qui se passe lorsque l’on utilise self
ou $this
, avec des attributs static
ou non :
<?php class DitBonjour { public static $fr = 'Coucou le monde !'; public static $de = 'Guten tag!'; public $en = 'Hello world!'; public $es = 'Buenos dias!'; function saluer() { echo '<strong>1. Public, static, direct :</strong> '.$this->de.'<br />'; echo '<strong>2. Public, static, self :</strong> '.self::$fr.'<br />'; echo '<strong>3. Public, direct :</strong> '.$this->en.'<br />'; echo '<strong>4. Public, self :</strong> '.self::$es.'<br />'; } } $appel = new DitBonjour(); $appel->saluer(); ?>
Ce qui renvoie :
Notice: Undefined property: DitBonjour::$de in F:\bn\Web\Test\PHPObjet\test2.php on line 13
1. Protected, static, direct :
2. Protected, static, self : Coucou le monde !
3. Public, direct : Hello world!
Fatal error: Access to undeclared static property: DitBonjour::$es in F:\bn\Web\Test\PHPObjet\test2.php on line 16
Moralité
- On ne peut accéder à un attribut static qu’avec self (ou parent, ou NomClass)
- On ne peut accéder à un attribut non static avec self, on y accède avec $this