Static Arrow Function¶
<?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();
It is possible to add the static option to an arrow function. In that case, PHP doesn’t allow usage of the local object context, via $this.
On the other hand, it is still possible to access all the local variables of the context, and, if ever, $this was assigned to a local variable, it may be imported in the arrow function context.
Also, note that PHP accepts the presence of $this in the static arrow function, as long as… it is not executed! Since there is no way to modify the static status of the arrow function, it is a zombie function: it may be passed around, but not executed.
See Also¶
Static closure, or not [Try me]
PHP Error Messages¶
PHP Features¶
Last updated: 14 July 2026