如何显示类的私有属性(PHP OOP)

如何显示类的私有属性(PHP OOP),php,oop,Php,Oop,我已经读到,最好让类的属性是私有的,并使用get/set方法来访问/更改它们 因此,我以这种方式设置了一个类,但我希望能够在html表中显示属性,我将使用一个单独的htmlTable显示类来实现这一点 我想到了4种可能性。如果你已经知道实现这一目标的理想方法,请随意跳过它们 多谢各位 可能性: 我可以使用以下方法获取类字段: $class_Vars = get_class_vars($object_class); $fields = $class_vars['fields']; // But

我已经读到,最好让类的属性是私有的,并使用get/set方法来访问/更改它们

因此,我以这种方式设置了一个类,但我希望能够在html表中显示属性,我将使用一个单独的htmlTable显示类来实现这一点

我想到了4种可能性。如果你已经知道实现这一目标的理想方法,请随意跳过它们

多谢各位

可能性:

  • 我可以使用以下方法获取类字段:

    $class_Vars = get_class_vars($object_class);
    $fields = $class_vars['fields'];
    
    // But as far as iterating through each object, this doesn't work:
    
    foreach($object_array as $current_object) {
        foreach($current_object as $value) {
            $html = '<td>' . $value . '</td>';
        }
    }
    
    我想这会管用,但我觉得不合适

  • 接口。 另一种可能是在我想做的每个类中编写一个htmlTable函数。但这是大量的代码重用

  • 接口。 或者我可以将
    export()
    函数写入每个只输出带有属性名和值的数组的类中。然后我的htmlTable类就可以处理这些输出了


  • 要么公开它们,要么使用
    get
    /
    set
    方法


    您还可以创建一个
    getAll()
    方法,该方法返回一个包含所有私有变量的关联数组。

    PHP的反射可能会有所帮助。实际上,我想说的是,最好将变量设置为受保护的,这样继承自原始变量的类也可以访问它们。@tereško,这取决于继承的类是否应该具有访问权限。小心继承-它是最被过度使用的OOP特性之一。但是,如果您确实计划继承,请确保您的原始类“可以扩展,但不能修改”@利库维卡,我不知道=p get/set方法的问题是对函数名进行编码,每个属性的函数名都不同。我刚刚尝试了getAll()方法(我在问题中提到的“export()”),它确实有效。此外,令人烦恼的是,在Dreamweaver中,这被标记为错误,即使它不是:“$fields=$object\u class\u name::$fields”,您可以只编写u get($name){return$this->$name;}魔术方法。
    foreach($fields as $value) {
        $get_func = 'get' . ucwords($value); // e.g. $get_func = 'getId'
        $current_value = $current_object->$get_func();
    }