Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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