Skip to content

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]>
@vudaltsov
Copy link
Contributor

vudaltsov commented Oct 2, 2025

Why not making it a static virtual property via a get hook?

@iluuu1994
Copy link
Member Author

Static properties don't support hooks. It would also be confusing to return different values from a static property depending on context.

@php php deleted a comment from hifron Oct 19, 2025
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

6 participants