Как фильтровать свойства по модификатору доступа

Поэтому я хотел бы вывести свойства, которые являются общедоступными только внутри класса.

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;

person Sarfaraaz    schedule 01.06.2015    source источник
comment
Взгляните на phps ReflectionClass   -  person Daan    schedule 01.06.2015
comment
@ Даан, спасибо, посмотрю   -  person Sarfaraaz    schedule 01.06.2015


Ответы (1)


Есть разные способы. Вы можете использовать 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 вы получите другое поведение.

person Federkun    schedule 01.06.2015