Je pense qu'il est important de mentionner la petite différence entre "self" et "static" en PHP car la "meilleure réponse" utilise "static", ce qui peut donner un résultat confus pour certaines personnes.
<?php
class X {
function getStatic() {
// gets THIS class of instance of object
// that extends class in which is definied function
return static::class;
}
function getSelf() {
// gets THIS class of class in which function is declared
return self::class;
}
}
class Y extends X {
}
class Z extends Y {
}
$x = new X();
$y = new Y();
$z = new Z();
echo 'X:' . $x->getStatic() . ', ' . $x->getSelf() .
', Y: ' . $y->getStatic() . ', ' . $y->getSelf() .
', Z: ' . $z->getStatic() . ', ' . $z->getSelf();
Résultats :
X: X, X
Y: Y, X
Z: Z, X