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

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

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;

4

Решение

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

3

Другие решения

Других решений пока нет …