大家好!
我的问题是:我需要为类中的静态变量重载标准get和set…但是php没有提供这样的功能...它是在2008年提出的,但仍然没有实现……只读的情况也是如此。
我的问题是:有没有一种方法可以让静态属性可以从外部读取,但又不会被修改?
echo aaa::$qwe; //<--- echoes value of $qwe
aaa::$qwe = '666'; //<--- throws an error because variable is protected from modification我不能使用const,因为一些变量包含数组。
也许有一些变通的方法?
是的,我知道我可以让它像aaa::Get('qwe'),但那不好……
发布于 2011-12-07 18:04:38
直接回答您的问题:不,您不能将常规属性标记为只读。如果你想设置基本类型(除了array),这是永远不会改变的,你应该使用常量
const QWE = '666';这不适用于对象和数组。我看到两个(比方说)“解决方案”
私有函数;公共函数getQwe() {$qwe$setQwe->qwe;}受保护函数setQwe($value) { $this->qwe = $value;}
我不太喜欢它们(“属性定义状态,而不是行为,就像方法一样”)。你得到的额外方法总是比属性多一倍,如果你有很多属性,这将极大地破坏你的类。然而,这是我所能看到的实现你想要实现的唯一方法。
/** * QWE **此属性应视为"readonly“。如果你改变这个值,一些可怕的事情会发生在你身上。** @readonly * @var string */公共$qwe = '666';
这不是很好,但至少你可以说“我告诉过你了”。
发布于 2011-12-07 17:57:33
如果该值从未更改,则可以改用const。否则,就没有办法满足您的限制(除了通过扩展挂钩PHP中的函数调用,但即使这样,您也需要将静态变量访问更改为函数调用;否则,您必须修补PHP)。
当然,你的应用程序做的是不是很好的设计,这是非常值得怀疑的。依赖于更改静态属性或多或少与依赖于全局变量相同。
发布于 2013-04-18 05:55:33
这就简单了一点:
class aaa{
private static $qwe='rty';
public static function qwe() { return self::$qwe; }
}它不允许更改,并且仍然很容易访问:
aaa::$qwe = 'something'; // fails
echo aaa::qwe(); // success我知道这不是很理想,但是你可以做一个全部替换
aaa::$qwe 使用
aaa::qwe()https://stackoverflow.com/questions/8413275
复制相似问题