-
Notifications
You must be signed in to change notification settings - Fork 8k
Implement Closure::getCurrent() to retrieve current closure #18167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
|
||
| $c(1); | ||
| var_dump($i); | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Closure in attribute should be tested as well.
Also probably a "fail" in class method and no function in global context.
This commit introduces support for the new `Closure::getCurrent()` method, available in PHP 8.5 (implemented in php/php-src#18167 ). A special function handler has been implemented to correctly analyze calls to this method. When used within a closure or arrow function, the analyzer now correctly infers the return type as the signature of the current closure. This enables precise type-checking for recursive anonymous functions. Additionally, the analyzer will now emit an `InvalidStaticMethodCall` error if `Closure::getCurrent()` is used outside of a valid closure context (e.g., in the global scope or within a regular method/function), aligning with PHP's runtime behavior. The internal PHP stubs have also been updated to include this new method. Signed-off-by: azjezz <[email protected]>
This commit introduces support for the new `Closure::getCurrent()` method, available in PHP 8.5 (implemented in php/php-src#18167 ). A special function handler has been implemented to correctly analyze calls to this method. When used within a closure or arrow function, the analyzer now correctly infers the return type as the signature of the current closure. This enables precise type-checking for recursive anonymous functions. Additionally, the analyzer will now emit an `InvalidStaticMethodCall` error if `Closure::getCurrent()` is used outside of a valid closure context (e.g., in the global scope or within a regular method/function), aligning with PHP's runtime behavior. The internal PHP stubs have also been updated to include this new method. Signed-off-by: azjezz <[email protected]>
|
Why not making it a static virtual property via a get hook? |
|
Static properties don't support hooks. It would also be confusing to return different values from a static property depending on context. |
Fixes GH-18163
This is a much simpler alternative to https://wiki.php.net/rfc/closure_self_reference.