查看: 119|回复: 1

没想到吧,PHP 中在类的外部也可以调用私有方法!

[复制链接]

2

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-3-31 20:29:50 | 显示全部楼层 |阅读模式
一般来说,在 Class 的外部是无法调用其私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊的情况下,如果真的需要调用,是否可以呢?
其实可以通过使用类的反射来实现,下面是具体的代码:
function wpjam_call_method($object, $method, ...$args){
        if(!method_exists($object, $method)){
                return;
        }

        $reflection        = new ReflectionMethod(get_class($object), $method);
        $is_public        = $reflection->isPublic();

        if($is_public){
                $callback        = [$object, $method];
        }else{
                $callback        = $reflection->getClosure($object);
        }
       
        return call_user_func_array($callback, $args);
}简单解释一下,首先还是简单判断对象该方法是否存在,接着获取对象方法的反射,然后判断一下是不是公共的方法,如果是公共就正常调用,不是则获取该方法的闭包,最后使用回调的方式来调用。
这个函数可以让你调用对象的私有或者受保护方法,建议只在一些很特殊的情况下才使用,为了方便大家调用,新版的 WPJAM Basic 也会集成该函数。
回复

使用道具 举报

3

主题

8

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2025-3-27 00:45:57 | 显示全部楼层
LZ是天才,坚定完毕
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表