【问题标题】:How to filter properties by access modifier如何通过访问修饰符过滤属性
【发布时间】:2015-08-14 19:47:44
【问题描述】:

所以我想输出只在一个类中公开的属性。

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;

【问题讨论】:

  • 看看phpsReflectionClass
  • @Daan,谢谢看看

标签: php class object access-modifiers


【解决方案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 开始你会得到另一种行为。

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 2014-02-25
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多