Is there a Java equivalent for the __call of PHP?
It would make sense to me if that's not the case, because it would probably result in compiler errors.
From the PHP manual on magic methods:
__call()
is triggered when invoking inaccessible methods in an object context.
The __invoke method is a way that PHP can accommodate pseudo-first-class functions. The __invoke method can be used to pass a class that can act as a closure or a continuation, or simply as a function that you can pass around. A lot of functional programming relies on first class functions.
Magic methods are special methods which override PHP's default's action when certain actions are performed on an object. All methods names starting with __ are reserved by PHP. Therefore, it is not recommended to use such method names unless overriding PHP's behavior.
Magic methods are special methods in python that have double underscores (dunder) on both sides of the method name. Magic methods are predominantly used for operator overloading.
This sort of dynamic method/attribute resolution which is common in dynamically typed languages such as PHP, Python and Ruby is not directly supported in the Java language.
The effect can be approximated using Dynamic Proxies which requires you to have an interface for which the implementation will be dynamically resolved. Third party libraries such as CGLIB allow similar things to be done with normal Java classes.
This API based, special case interception of method invocation is not as convenient as the direct, always on support you can get with __call
in PHP or equivalent features in other dynamically typed languages (such as __getattr__
in Python). This difference is due the fundamentally different ways in which method dispatch is handled in the two types of languages.
No, there is not.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With