php - Yii2: 如何获取 $this 的属性?
问题描述
我有一个模型类 A 和一个子类 B。
class A extends \yii\base\Model {
public $a1,$a2;
}
class B extends A {
public $b1,$b2;
}
$o = new B();
如何获取$o
as Array 的属性值,但仅来自class B
,而不是来自class A
?
打电话时$o->attributes
我得到['a1'=>..., 'a2'=>...,'b1'=>..., 'b2'=>...]
我的预期结果是['b1'=>..., 'b2'=>...]
。
有没有 Yii2 的做法,还是我们必须使用一些 PHP 函数/语言特性?
解决方案
您可以使用反射来枚举与您想要的类匹配的属性。 https://www.php.net/manual/en/reflectionclass.getproperties.php
class A extends \yii\base\Model {
public $a1,$a2;
}
class B extends A {
public $b1,$b2;
}
$o = new B();
$ref = new \ReflectionClass(B::class);
$props = array_filter(array_map(function($property) {
return $property->class == B::class ? $property->name : false;
}, $ref->getProperties(\ReflectionProperty::IS_PUBLIC)));
print_r($props);
/*
Will Print
Array
(
[0] => b1
[1] => b2
)
*/
推荐阅读
- c# - 与接口相关的访问修饰符
- django - 仅在 django 中创建基于更新类的视图时,为我的文件上传使用表单集不起作用
- base64 - 编码和解码 64 是如何确定最后几个零只是填充的?
- java - Spring boot REST API 处理授权码 GRANT_TYPE
- reactjs - 如何使用 Axios 下载多个文件?
- apache-spark - 使用 spark 处理 20 GB CSV 文件
- graphql - 抑制 GraphQL:使用模板字符串时 VS Code 中的语法错误
- python - Selenium 使用 find_element 在循环中查找元素而不增加迭代时间
- pandas - 如何将工作熊猫代码转换为 dask 代码?
- r - 为向量中的每个项目计算跨越向量中值的行数