如何获取类的公共属性?

6

我不能简单地使用get_class_vars(),因为我需要它能够在PHP版本早于5.0.3的情况下工作(参见http://pl.php.net/get_class_vars Changelog)

另外:我该如何检查属性是否为公共属性?


我认为这只会是在PHP 5.0.2中的问题。在PHP 5.0.1及更早版本中,受保护和私有属性被返回,但前缀为null字节(\x00),可以使用正则表达式排除它们。 - MrWhite
3个回答

8
这可以通过使用反射实现。
<?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
        )

)

3
或者你可以这样做:
$getPublicProperties = create_function('$object', 'return get_object_vars($object);');
var_dump($getPublicProperties($this));

1
你可以让你的类实现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    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接