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


I want to give access to protected properties to another class

我想将对受保护属性的访问权限授予另一个类。我一直在想办法做这件事。

我有一个等级的

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

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

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

我考虑过的事情:

使用__get方法从类外部访问受保护的属性,从而基本上使类成为只读的。然而,这需要大约350%的时间来访问变量。

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

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

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

任何想法或想法都值得赞赏。

我可能遗漏了一些东西,但在我看来,您只想扩展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变量和函数。