我想将受保护属性的访问权限授予另一个类

时间:2011-06-02 22:30:36

标签: php visibility

我想将受保护属性的访问权限授予另一个类。我一直试图想出一个聪明的方法。

我有一个班级

abstract class Form_Abstract {
    protected $formAttributes = array();
    protected $fields = array();
}

使用$ fields和$ formAttributes的setter方法。为了使它更复杂,字段设置器方法创建一个单独的Field类,它具有自己的受保护属性,并将其添加到字段列表中。我想强制使用setter来管理进入这个类的数据。

但是,我希望能够将此类传递给各种其他类,这些类将抓取数据并以不同方式使用它。其他类使用数据的方式非常不同,因此很难做出命令类型模式。

我考虑过的事情:

使用__get方法从类外部访问受保护的属性,因此基本上使该类只读。但是,访问变量需要大约350%的时间。

有一个方法可以输出多维数组中的所有类变量。虽然这似乎是隐藏类内部的最佳方法,但是每个脚本实例可能需要多次生成这些数组似乎并不高效。

执行某种继承技巧,允许访问扩展特定基类或类的类。这似乎是一个很酷的选择,但我想以一种我想避免的方式创建依赖。它还需要特殊的方法来获取变量。

我当然可以公开所有属性,但这不允许我控制进入的数据。

赞赏任何想法或想法。

1 个答案:

答案 0 :(得分:1)

我可能错过了一些东西,但在我看来,你想做的就是扩展Form_Abstract类......

abstract class Form_Abstract {
    protected $formAttributes = array('apple', 'orange');
    protected $fields = array();
}

class My_Form extends Form_Abstract
{
    function __construct() { }

    function displayFormAttribute($num)
    {
        return $this->formAttributes[$num];
    }
}

$x = new My_Form;

echo $x->displayFormAttribute(0); // apple
echo $x->displayFormAttribute(1); // orange

通过扩展功能,您可以访问所有publicprotected变量和函数,但不能访问 private 变量和函数。