2010-01-07 30 views
5

我不能簡單地用get_class_vars(),因爲我需要它與PHP版本更早的工作比5.0.3(見http://pl.php.net/get_class_vars更新日誌)如何獲得課堂的公共屬性?

或者:我如何檢查是否屬性是公開的嗎?

+0

我認爲這隻會是PHP 5.0.2中的問題。在PHP 5.0.1及更早版本中,保護屬性和私有屬性被返回,但以nul字節('\ x00')作爲前綴,可以用正則表達式排除。 – MrWhite 2014-11-27 23:56:04

回答

7

這是可以通過使用反射。

<?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