我想将对受保护属性的访问权限授予另一个类。我一直在想办法做这件事。
我有一个等级的
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
扩展使您可以访问所有public
和protected
变量和函数,但不能访问private
变量和函数。