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

Jor*_*dan 3 php reflection

所以我正在使用一个扩展基本设置类的设置类,它类似于"全局设置".有几个服务,每个服务都有自己的设置类,可以扩展抽象基础设置类.抽象基本设置类对应于服务之间共享的设置.首先,我将通过下面的示例进行说明,然后我将定义问题:

例:

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

class MyServiceSettings extends BaseSettings {
    private $settingC;
    public $settingD;
}
Run Code Online (Sandbox Code Playgroud)

问题:

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

$reflect = new ReflectionClass($this);
Run Code Online (Sandbox Code Playgroud)

..来自MyServiceSettings类或BaseSettings类(因为很明显你不能有一个抽象类的实例),$reflect->getProperties()总会返回MyServiceSettings和BaseSettings的属性(我想这是合适的,因为我们真的在工作单一的具体课程)

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

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

dev*_*ler 8

我会这样得到它:

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

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