PHP 的 __call 魔法函数在其他语言如何实现

其他语言有没有类似PHP 的__call方法的,如果没有,相同场景是怎么实现的

地址:https://www.zhihu.com/question/351721281/answer/864441532

标签:PHP

我的回答

一般情况下,动态语言会提供这个能力,比如 Python。JS 的话,我不太清楚。而静态语言通常是没有的。 __call 是 PHP 的语言糖。其他语言,如果没有的话,可以自己写一个呗。

它本质上是一个方法,只不过是 PHP 提供了更便捷的写法。自己实现一个并不复杂,区别在于,我要每次明确调用 obj.Call(meothodName, args…)。如果要实现的和 PHP 逻辑一样,可以利用反射机制检查下,找不到方法的情况下再执行后面的逻辑。

提醒一下,语法糖多了不一定是好事,它会让代码看起来不是那么直观,而且,这种方式对语法检查工具不友好,不能做到自动提示,即使你写错了也不能及时知道。

如果不想手写 call 且对自动生成代码感兴趣,可以搞个类似 protobuf 的 idl,然后自动生成代码。哈哈,似乎也是可行的,但这个会复杂不少。