如何通过访问修饰符过滤属性

时间:2015-06-01 11:11:36

标签: php class object access-modifiers

所以我想输出一个只在一个类中公开的属性。

class MyClass
{
    $public $var1, $var2, var3;
    $private $pVar1, $pVar2, pVar3;

    //outputs all variables and their values
    //lets assume they are all defined
    function outputPublic()
    {
        foreach($this as $key=>$val)
            echo $key . ' : ' . $val . '<br>';
    }
}

我通过使用外部函数来循环遍历类的实例,但我想知道如何从内部执行此操作。 有没有办法获得访问修饰符?

从外部检索公共属性的示例

$obj = new MyClass();
foreach($obj as $key=$val)
    echo $key . ' : ' . $val;

1 个答案:

答案 0 :(得分:3)

有不同的方式。您可以使用get_object_vars

foreach(call_user_func('get_object_vars', $this) as $key => $val) {
    echo $key . ' : ' . $val . '<br>';
}

或者您可以使用ReflectionClass

$reflect = new ReflectionClass($this);
foreach($reflect->getProperties(ReflectionProperty::IS_PUBLIC) as $props) {
    echo $props->getName() . ' : ' . $props->getValue($this) . '<br>';
}

我建议使用ReflectionClass而不是get_object_vars,从php 7中你会得到另一种行为。