php反射获取属性而不获取基类的属性

2024-01-05

因此,我正在使用一个设置类,它扩展了类似于“全局设置”的基本设置类。有多种服务,每个服务都有自己的设置类,该类扩展了抽象基本设置类。抽象基设置类对应于服务之间共享的设置。首先我将用下面的例子来说明,然后我将定义问题:

example:

abstract class BaseSettings {
    protected $settingA;
    protected $settingB;
}

class MyServiceSettings extends BaseSettings {
    private $settingC;
    public $settingD;
}

problem:

如果我像这样创建一个 ReflectionClass 实例..

$reflect = new ReflectionClass($this);

..来自 MyServiceSettings 类或 BaseSettings 类(因为显然你不能拥有抽象类的实例),$reflect->getProperties()将始终返回 MyServiceSettings 和 BaseSettings 的属性(我认为这是合适的,因为我们实际上正在使用单个具体类)

现在我确信我可以创建一个空类来扩展抽象 BaseClass 以找出哪些属性去哪里(或者只是删除抽象并创建 BaseClass 的实例),但这看起来相当混乱,所以我想知道是否也许有一种更优雅的方法来确定哪些属性属于父类,哪些属性属于子类?

如果您好奇我为什么要这样做 - 我将设置序列化为 .json 文件,以实现我添加的恢复功能,以便可以从上次成功完成的最后一个原子操作继续。为什么我必须这样做——环境的限制。


我会这样得到它:

$class = new ReflectionClass('Some_class_name');
$properties = array_filter($class->getProperties(), function($prop) use($class){ 
    return $prop->getDeclaringClass()->getName() == $class->getName();
});

因此,基本上获取所有属性并迭代它们,检查它们是否在我们反映的类中声明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php反射获取属性而不获取基类的属性 的相关文章