Not In A Closure¶
Calling Closure native methods outside a closure or an arrow function leads to an error message.
This applies to functions or methods, that are later turned into a closure with the first class callable syntax: while that syntax creates a closure, the underlying code is not a closure, and cannot access the related features.
The warning message, used in previous PHP version, was not as explicit as the new one.
PHP code¶
<?php
function foo() {
Closure::getCurrent();
}
foo(); // Error
foo(...)(); // Error: foo was put inside a closure, but it is still not a closure itself.
?>
Before¶
PHP Fatal error: Uncaught Error: Call to undefined method Closure::getCurrent()
After¶
PHP Fatal error: Uncaught Error: Current function is not a closure
Fatal error: Uncaught Error: Current function is not a closure
PHP version change¶
This behavior changed in 8.5