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

标签 php reflection

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

例子:

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

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

问题:

如果我像这样创建一个 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();
});

所以基本上获取所有属性并遍历它们,检查它们是否在我们反射(reflect)的类中声明。

关于php反射获取属性而不获取基类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636999/

相关文章:

php - 从 SQL 日期时间元素中减去 php 系统时间

php - 如何在自动完成表单的脚本中获取 json 文件的多个值

java - 按类动态检索监听器实例

c# - .NET - 获取反射(reflect)的 PropertyInfo 的默认值

php - codeigniter - 在 View 中检索 Controller 变量(使用 $this)

php - 如何知道谁订阅了我的RSS?

php - 使用 PHP Simple HTML DOM Parser 卡住选择类或 id

java - 使用反射读取类中定义的 protected 注释

java - 如何确定已实现接口(interface)之一的通用参数?

java - 如何读取系统本地路径中存在的 Java 文件的所有方法