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

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

例:

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();

});

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

标签:php,reflection

来源: https://codeday.me/bug/20190718/1493861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值