Php 如何按访问修改器筛选属性

Php 如何按访问修改器筛选属性,php,class,object,access-modifiers,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=&g

所以我想只从类中输出公共属性

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>';
    }
}

有不同的方法。你可以用

foreach(调用_user_func('get_object_vars',$this)作为$key=>$val){
回显$key.':'.$val.
'; }
或者你可以使用

$reflect=新的ReflectionClass($this);
foreach($reflect->getProperties(ReflectionProperty::IS_PUBLIC)作为$props){
echo$props->getName()。:'.$props->getValue($this)。';
}

我建议使用ReflectionClass而不是get_object_vars,从PHP7中可以获得另一种行为。

请看一看phps
ReflectionClass
@Daan,谢谢,我会看一看
$obj = new MyClass();
foreach($obj as $key=$val)
    echo $key . ' : ' . $val;
foreach(call_user_func('get_object_vars', $this) as $key => $val) {
    echo $key . ' : ' . $val . '<br>';
}
$reflect = new ReflectionClass($this);
foreach($reflect->getProperties(ReflectionProperty::IS_PUBLIC) as $props) {
    echo $props->getName() . ' : ' . $props->getValue($this) . '<br>';
}