PHP

PHP访问Composer第三方类库中受保护的属性

在重构前辈的项目(Laravel5.1)代码时,发现前辈之前有一些对laravel框架底层代码做过一些更改,于是导致了整个框架升级时这些修改被删除的问题。于是决定把这些修改移至vendor目录外部。奈何之前的一些修改用到了Laravel原生类库中的一些protected属性和方法,导致我在外部无法访问。经过苦思冥想,查阅前人的经验之道后,发现反射可以解决这个问题,整理代码如下:

$refClass = new ReflectionClass($q); // 传入对象或类名,得到ReflectionClass对象
$refProperty = $refClass->getProperty('connection'); // 获取一个属性,返回的是一个ReflectionProperty类
$refProperty->setAccessible(true);// 设置为可见,也就是可访问
$ref = $refProperty->getValue($q); // 获取类中已定义的属性

这样子我们就可以通过访问$ref,来代替访问原来无法在外部访问的属性。

ReflectionClass用法还有很多,如访问受保护的方法、参数等详细信息。其他用法详见:https://www.php.net/manual/zh/book.reflection.php

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关推荐