我不能簡單地用get_class_vars()
,因爲我需要它與PHP版本更早的工作比5.0.3(見http://pl.php.net/get_class_vars更新日誌)如何獲得課堂的公共屬性?
或者:我如何檢查是否屬性是公開的嗎?
我不能簡單地用get_class_vars()
,因爲我需要它與PHP版本更早的工作比5.0.3(見http://pl.php.net/get_class_vars更新日誌)如何獲得課堂的公共屬性?
或者:我如何檢查是否屬性是公開的嗎?
這是可以通過使用反射。
<?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
)
)
或者,你可以這樣做:
$getPublicProperties = create_function('$object', 'return get_object_vars($object);');
var_dump($getPublicProperties($this));
你可以讓你的類實現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
我認爲這隻會是PHP 5.0.2中的問題。在PHP 5.0.1及更早版本中,保護屬性和私有屬性被返回,但以nul字節('\ x00')作爲前綴,可以用正則表達式排除。 – MrWhite 2014-11-27 23:56:04