如何使用PHP从继承上下文中的基类获取属性名数组?
这里我有一组实体类,它们是这样组成的:如何使用PHP从继承上下文中的基类获取属性名数组?,php,arrays,oop,reflection,Php,Arrays,Oop,Reflection,这里我有一组实体类,它们是这样组成的: <?php class BaseModel { protected $Id; protected $CreateDate; protected $LastUpdateDate; // public setters, getters and validation methods public function getClassFields(){ // how to get an array con
<?php
class BaseModel {
protected $Id;
protected $CreateDate;
protected $LastUpdateDate;
// public setters, getters and validation methods
public function getClassFields(){
// how to get an array containing all property names,
// including those from inherited classes?
$array = (array) $this; //this do not work =(
return $array;
}
}
class FooModel extends BaseModel {
protected $Bar;
protected $Baz;
protected $Loo;
// public setters, getters and validation methods
}
?>
这里有一种方法
$ref = new ReflectionClass('FooModel');
$properties = $ref->getProperties();
$result = array();
foreach($properties as $i=>$prop){
$result[] = $prop->getName();
}
$result数组将保存所需的属性。由于您试图从类中获取变量,因此可以使用内置函数:get\u class\u vars
所以这里有更详细的内容
将代码替换为以下内容:
class BaseModel {
protected $Id;
protected $CreateDate;
protected $LastUpdateDate;
// public setters, getters and validation methods
public function getClassFields(){
return array_keys(get_class_vars(get_class($this))); // changed
}
}
class FooModel extends BaseModel {
protected $Bar;
protected $Baz;
protected $Loo;
// public setters, getters and validation methods
}
然后,如果您使用:
$foo = new BaseModel();
print_r($foo->getClassFields());
输出为:
Array ( [0] => Id [1] => CreateDate [2] => LastUpdateDate )
如果您在孩子身上使用它:
$bar = new FooModel();
print_r($bar->getClassFields());
现在输出为:
Array ( [0] => Bar [1] => Baz [2] => Loo [3] => Id [4] => CreateDate [5] => LastUpdateDate )
参考文献:
:返回对象的类的名称
:获取类的默认属性
:返回数组的所有键或键的子集
侧注:如果不希望实例化基本模型
类,请将其更改为抽象类:
abstract class BaseModel {
您当前的方法有效,除了键前面有“*`like[*Bar]=>[*Baz]=>[*Loo]=>[*Id]=>[*CreateDate]=>[*LastUpdateDate]=>
您尝试过@AbraCadaver吗谢谢您的评论。当我迭代生成的数组时,类似这样的foreach($k=>$v)的键($k
)是空的。。。我不知道我错在哪里…@FirstOne谢谢你的评论。我来看看!o/@FirstOne你能把这个作为回答吗?我使用返回数组_键(get_class_vars(get_class($this))解决了这个问题
atgetClassFields()
方法。非常感谢。