Php Yii2:如何获取$this的属性?
我有一个模型类a和一个子类BPhp Yii2:如何获取$this的属性?,php,yii2,Php,Yii2,我有一个模型类a和一个子类B class A extends \yii\base\Model { public $a1,$a2; } class B extends A { public $b1,$b2; } $o = new B(); 如何将$o的属性值作为数组获取,而只是从类B获取,而不是从类A获取 调用$o->attributes时,我得到['a1'=>…,'a2'=>…,'b1'=>…,'b2'=>…] 我的预期结果是['b1'=>…,'b2'=>…] 是否有一种Y
class A extends \yii\base\Model {
public $a1,$a2;
}
class B extends A {
public $b1,$b2;
}
$o = new B();
如何将$o
的属性值作为数组获取,而只是从类B
获取,而不是从类A
获取
调用$o->attributes
时,我得到['a1'=>…,'a2'=>…,'b1'=>…,'b2'=>…]
我的预期结果是['b1'=>…,'b2'=>…]
是否有一种Yii2方法,或者我们必须依赖于某些PHP函数/语言功能?您可以在类
B
中取消设置变量$a1
和$a2
。。。
B类扩展了A类{
公共预算b1元、b2元;
公共函数构造(){
未设置($this->a1,$this->a2);
}
}
...
在我的例子中,当我查看$o->attributes
时。属性a1
和a2
仍然存在
但是变量值变得
*未初始化*
并且无法使用($o->a1
将引发并显示错误消息)。您可以在类B
构造中取消设置变量$a1
和$a2
。。。
B类扩展了A类{
公共预算b1元、b2元;
公共函数构造(){
未设置($this->a1,$this->a2);
}
}
...
在我的例子中,当我查看$o->attributes
时。属性a1
和a2
仍然存在
但是变量值变得*未初始化*
并且无法使用($o->a1
将引发并显示错误消息)。您可以使用反射来枚举与所需类匹配的属性。
A类扩展\yii\base\Model{
公帑a1元、a2元;
}
B类扩展了A类{
公共预算b1元、b2元;
}
$o=新的B();
$ref=new\ReflectionClass(B::class);
$props=数组\过滤器(数组\映射(函数($property){
返回$property->class==B::class?$property->name:false;
},$ref->getProperties(\ReflectionProperty::IS_PUBLIC));
印刷品(道具);
/*
将打印
排列
(
[0]=>b1
[1] =>b2
)
*/
您可以使用反射来枚举与所需类匹配的属性。
A类扩展\yii\base\Model{
公帑a1元、a2元;
}
B类扩展了A类{
公共预算b1元、b2元;
}
$o=新的B();
$ref=new\ReflectionClass(B::class);
$props=数组\过滤器(数组\映射(函数($property){
返回$property->class==B::class?$property->name:false;
},$ref->getProperties(\ReflectionProperty::IS_PUBLIC));
印刷品(道具);
/*
将打印
排列
(
[0]=>b1
[1] =>b2
)
*/
如果您知道要获取哪些属性,可以在方法的第一个参数中命名它们,如下所示:
$attributes=$o->getAttributes(['b1','b2']);
如果需要所有属性,但不知道有哪些属性,可以使用父类的方法获取不需要的属性列表,并将其作为getAttributes()
method的第二个参数传递以将其忽略
$except=A::instance()->attributes();
$attributes=$o->getAttributes(null,$except);
如果您知道要获取哪些属性,可以在方法的第一个参数中命名它们,如下所示:
$attributes=$o->getAttributes(['b1','b2']);
如果需要所有属性,但不知道有哪些属性,可以使用父类的方法获取不需要的属性列表,并将其作为getAttributes()
method的第二个参数传递以将其忽略
$except=A::instance()->attributes();
$attributes=$o->getAttributes(null,$except);
不扩展A
?这是大型代码库的一部分…生成一个只返回B类属性的函数不扩展A
?这是大型代码库的一部分…生成一个只返回B类属性的函数