直接回答您的问题:不,您不能将常规属性标记为只读.如果你想设置基本类型(数组除外),那将永远不会改变,你应该使用常量
const QWE = '666';
这对于对象和数组不起作用.我看到两个(让我们说)“解决方案”
>使用Getter
private $qwe;
public function getQwe() { return $this->qwe; }
protected function setQwe($value) { $this->qwe = $value; }
我不太喜欢它们(“属性定义状态,而不是行为,就像方法一样”).你总是得到两倍于属性的额外方法,如果你有很多属性,这将极大地炸毁你的课程.但是,据我所知,实现您想要实现的目标的唯一方法就是这样.
>相信你的用户;)评论你的财产,并说出“如果你改变这个价值,可能会有什么东西会破坏,这是你自己的错”.
/**
* QWE
*
* This property should be treatened as "readonly". If you change this value
* something scary will happen to you.
*
* @readonly
* @var string
*/
public $qwe = '666';
它不是很好,但至少你可以说“我告诉过你”.