self est un type valide sur une closure
<?php
class XABC {
function foo() {
// static does not apply to self
$f = static function () : self {
// __CLASS__ is preserved in the closure
echo __CLASS__.PHP_EOL;
return new self();
};
return $f;
}
}
var_dump((new xabc)->foo()());
self est un type valide à l’intérieur d’une classe (trait, interface, enum) pour référencer la classe courante. self peut également être utilisé avec une closure, car la closure utilise son emplacement de définition. Le nom de la classe peut ainsi être exporté et instancié en dehors de la classe d’origine.
Cela s’applique également à static et parent. Essayez-le avec static pour plus d’amusement.
Cette astuce s’applique aussi lorsque la closure est rendue statique, bien que cela puisse être surprenant.
Cette astuce s’applique aux fonctions fléchées.
Cette astuce ne s’applique pas aux fonctions créées dans une classe (dommage…).
See Also
PHP Features
Last updated: 11 October 2026