2015-06-01 5 views
4

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

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

Посмотрите на phps 'ReflectionClass' – Daan

+0

@Daan, спасибо, посмотрим – Sarfaraaz

ответ

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 вы получаете другое поведение.

Смежные вопросы