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