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



1 Responses to Pour se fixer les idées sur self et this