Fonction fléchée statique
<?php
class x {
private $p = 5;
function foo() {
$b = 2;
$f = fn($a) => $a + $b + $this->p;
echo $f(1); // 8 = 1 + 2 + 5
$t = $this;
$f = static fn($a) => $a + $b + $t->p;
echo $f(1); // 8 = 1 + 2 + 5
$f = static fn($a) => $a + $b + $this->p;
// Only an error if the code is executed
//echo $f(1);
}
}
new x()->foo();
Il est possible d’ajouter l’option static à une fonction fléchée. Dans ce cas, PHP n’autorise pas l’utilisation du contexte de l’objet courant via $this.
En revanche, il reste possible d’accéder à toutes les variables locales du contexte, et, si jamais $this a été assigné à une variable locale, elle peut être importée dans le contexte de la fonction fléchée.
À noter également que PHP accepte la présence de $this dans une fonction fléchée statique, tant qu’elle n’est pas exécutée ! Puisqu’il n’y a aucun moyen de modifier le statut statique de la fonction fléchée, il s’agit d’une fonction zombie : elle peut être transmise, mais pas exécutée.
See Also
- Static closure, or not [Try me]
PHP Error Messages
PHP Features
Last updated: 11 October 2026