首页 > 解决方案 > Yii2: 如何获取 $this 的属性?

问题描述

我有一个模型类 A 和一个子类 B。

class A extends \yii\base\Model {
    public $a1,$a2;
}

class B extends A {
    public $b1,$b2;
}

$o = new B();

如何获取$oas Array 的属性值,但仅来自class B,而不是来自class A

打电话时$o->attributes我得到['a1'=>..., 'a2'=>...,'b1'=>..., 'b2'=>...]

我的预期结果是['b1'=>..., 'b2'=>...]

有没有 Yii2 的做法,还是我们必须使用一些 PHP 函数/语言特性?

标签: phpyii2

解决方案


您可以使用反射来枚举与您想要的类匹配的属性。 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
)
*/

推荐阅读