我打算创建包含纯不可变数据的类,以及访问它的简单特征(或类,它不是重点)。因此,虚拟代码来说明我的意思:通过闭包访问私有静态属性 - 是否合理?
//Data class
class DataStorage
{
use DataHandler;
static private $dataStorage = [
'key' => 'data'
];
}
特质来获取数据:
//Data getter
trait DataHandler
{
static public function get($property)
{
$func = function() use($property) {
return self::$dataStorage[$property];
};
$obtain = Closure::bind($func, NULL, get_class());
return $obtain();
}
}
正如你所看到的,Closure
用于获取数据是私有的,它很简单,适合我要求。但是,这种方法似乎有些危险。看起来就像我可以访问ANY静态私有财产ANY类。
Q1:它违背了OOP的原则吗?
Q2:这是很好的解决方案通过使DataStorage
类作为这样一个实现了接口,只是将其签入DataHandler::get()
方法人为地限制这种特质的使用情况如何?
对不起,如果我的问题是愚蠢的,在这种情况下,我也非常感谢建设性的批评。
那么,你也只是可以声明你的属性为公开...(假设你有一些类似的机制来设置它们)。所以,这没有任何意义。 – bwoebi 2014-10-01 19:20:28
如果你想直接访问它,那么没有太多要点属性'私人'。只需提供一个“公共”getter方法或使其本身成为public。 – Crackertastic 2014-10-01 19:23:40
我希望实际上只读访问它,并且我想要一种统一的机制来完成它,因为可能会有很多'DataStorage'类。如果它只是一个getter方法,那么可能在不存在的变量上返回self ::就会引发警告。那么,也许我在这里确实感到困惑...... – Nevertheless 2014-10-01 19:37:17