Как да филтрирате свойства чрез модификатор на достъп

Така че бих искал да извеждам свойствата, които са публични, само от клас.

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
@Daan, благодаря, ще погледна   -  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