我想将受保护属性的访问权限授予另一个类。我一直试图想出一个聪明的方法。
我有一个班级
abstract class Form_Abstract {
protected $formAttributes = array();
protected $fields = array();
}
使用$ fields和$ formAttributes的setter方法。为了使它更复杂,字段设置器方法创建一个单独的Field类,它具有自己的受保护属性,并将其添加到字段列表中。我想强制使用setter来管理进入这个类的数据。
但是,我希望能够将此类传递给各种其他类,这些类将抓取数据并以不同方式使用它。其他类使用数据的方式非常不同,因此很难做出命令类型模式。
我考虑过的事情:
使用__get方法从类外部访问受保护的属性,因此基本上使该类只读。但是,访问变量需要大约350%的时间。
有一个方法可以输出多维数组中的所有类变量。虽然这似乎是隐藏类内部的最佳方法,但是每个脚本实例可能需要多次生成这些数组似乎并不高效。
执行某种继承技巧,允许访问扩展特定基类或类的类。这似乎是一个很酷的选择,但我想以一种我想避免的方式创建依赖。它还需要特殊的方法来获取变量。
我当然可以公开所有属性,但这不允许我控制进入的数据。
赞赏任何想法或想法。
答案 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
通过扩展功能,您可以访问所有public
和protected
变量和函数,但不能访问 private
变量和函数。