Skip to content

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

Closed
wants to merge 2 commits into from

Conversation

iluuu1994
Copy link
Member

Fixes GH-18163

This is a much simpler alternative to https://wiki.php.net/rfc/closure_self_reference.


$c(1);
var_dump($i);

Copy link
Contributor

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.

@iluuu1994 iluuu1994 closed this in eb65ec4 Jul 21, 2025
azjezz added a commit to carthage-software/mago that referenced this pull request Jul 21, 2025
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]>
azjezz added a commit to carthage-software/mago that referenced this pull request Jul 27, 2025
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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Named anonymous functions
5 participants