PHPのリフレクションと静的でないパブリックプロパティを取得します。

DLK:

私が使用する必要がありますPHPのリフレクションAPIをクラスのすべてのパブリックにアクセスのプロパティを取得するために静的ではありませんが

静的でないだけで、パブリックプロパティを取得するためには、私はそれを行うには見ることができる唯一の方法は、IS_STATICプロパティを取得し、使用していたarray_diff()唯一の公共のものを取得します。

最終的なクラスは、次のようになります。

class foo {
    public static $a;
    public static $b;
    public static $c;

    public $d;
    public $e;
    public $f;

    public function reflect()
    {
        $reflection = new ReflectionClass($this);
        $public = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
        $static = $reflection->getProperties(ReflectionProperty::IS_STATIC);
        $properties = array_diff($public, $static);
        foreach($properties as $property) {
            echo $property->name . "n";
        }
    }

}

コール:

$foo = new foo;
$foo->reflect();

以下からの出力reflect()、今は次のようになります。

d
e
f

質問:これを行うには良い方法はありますか?

:私の元のクラスが長すぎます!このクラスは、鉱山の例similerです。

u_mulder:

最速の方法は間違いなく使用されたget_object_varsあなたのケースのために、:

print_r(get_object_vars($foo)); 
// outputs
Array
(
    [d] => 
    [e] => 
    [f] => 
)

キーはpropertesの名前です。

しかし、インスタンスをインスタンス化することは、非常に重いことができます。だから、あなたはまだ反射とフィルタリングの少しを使用することができます。

public function reflect()
{
    $reflection = new ReflectionClass($this);
    $properties =  array_filter(
        $reflection->getProperties(ReflectionProperty::IS_PUBLIC),
        function ($property) {
            return !$property->isStatic();
        }
    );
    foreach($properties as $property) {
        echo $property->name . "\n";
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=9915&siteId=1