如何获取类的公共属性?

Posted

技术标签:

【中文标题】如何获取类的公共属性?【英文标题】:How to get public properties of a class? 【发布时间】:2011-01-02 13:04:16 【问题描述】:

我不能简单地使用get_class_vars(),因为我需要它与早于 5.0.3 的 php 版本一起使用(请参阅 http://pl.php.net/get_class_vars 变更日志)

或者:我如何检查财产是否是公开的?

【问题讨论】:

我认为这只会是 PHP 5.0.2 中的问题。在 PHP 5.0.1 和更早的版本中,protected 和 private 属性被返回,但以 nul 字节 (\x00) 为前缀,可以用正则表达式排除。 【参考方案1】:

这可以通过使用反射来实现。

<?php

class Foo 
  public $alpha = 1;
  protected $beta = 2;
  private $gamma = 3;


$ref = new ReflectionClass('Foo');
print_r($ref->getProperties(ReflectionProperty::IS_PUBLIC));

结果是:

Array
(
    [0] => ReflectionProperty Object
        (
            [name] => alpha
            [class] => Foo
        )

)

【讨论】:

【参考方案2】:

或者你可以这样做:

$getPublicProperties = create_function('$object', 'return get_object_vars($object);');
var_dump($getPublicProperties($this));

【讨论】:

【参考方案3】:

你可以让你的类实现 IteratorAggregate 接口

class Test implements IteratorAggregate

    public    PublicVar01 = "Value01";
    public    PublicVar02 = "Value02";
    protected ProtectedVar;
    private   PrivateVar;

    public function getIterator()
    
        return new ArrayIterator($this);
    



$t = new Test()
foreach ($t as $key => $value)

    echo $key." = ".$value."<br>";

这将输出:

PublicVar01 = Value01
PublicVar02 = Value02    

【讨论】:

以上是关于如何获取类的公共属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有继承方法的情况下获取类的公共方法?

如何获取对象的公共属性

公共属性列表及其值[重复]

java中如何通过反射获取类的属性

如何在javascript中获取类的私有属性名称? [复制]

第三次发了,反射如何获取子类属性的值