php 通过反射实现类的私有方法、保护类型方法访问

没有你想不到,只有你做不到……

 

class Benz extends Car
{
    private $customProp = "自定义属性";
    
    ...

    private function customMethod()
    {
        echo "Call custom prop \$customProp: " . $this->customProp . PHP_EOL;
        echo "This is a custom method in Benz Class" . PHP_EOL;
    }
}

 

如果直接这样访问的话

(new Benz())->customMethod();

 

会报错,因为customMethod 方法是 私有方法,外部不能直接这样方法

 

那有什么办法可以实现访问呢

// 通过反射调用非 public 方法
$method = new ReflectionMethod(Benz::class, 'customMethod');
$method->setAccessible(true);

$benz = new Benz();
$method->invoke($benz);

通过反射,我们可以在运行时以逆向工程的方式对 PHP 类进行实例化,并对类中的属性和方法进行动态调用,不管这些属性和方法是否对外公开,所以这是一个黑科技。

 

posted @ 2022-04-24 09:02  方达达  阅读(35)  评论(0编辑  收藏  举报