【发布时间】:2012-02-16 16:02:41
【问题描述】:
PHP 中是否真的存在只读属性而我不知道它们?如何将公共属性设为只读??
我只是在玩 ReflectionClass,尝试覆盖属性时收到以下错误消息:
$lol = new ReflectionObject($obj);
$lol->name = 'awawawawa';
【问题讨论】:
-
呃!属性不是这样工作的:它们要么是私有的,要么是受保护的,要么是公共的……尽管您可以使用魔术 getter 和 setter 来模拟它
-
我知道,我正在使用 getter 来达到这个目的 :( 但是 ReflectionClass 用什么来使它们只读???显然它们不是 getter,因为它们不会出现在那里.. .
-
那么 ReflectionObject 不是 $obj 的另一个实例,也不是指向它的指针,所以它没有相同的方法……它是一个具有自己独特属性和方法的 ReflectionObject可用于显示有关 $obj 的信息。 ReflectionObject 没有名为“name”的属性(公共或其他),即使 $obj 有,因此您无法更改该值。我假设 Reflection 以自己的方式实现了魔法 getter/setter 以防止这种情况发生
-
@MarkBaker 实际上,它有一个名为 name 的公共属性。它被记录在案。
ReflectionObject extends ReflectionClass和ReflectionClass包含public $ReflectionClass->name;
标签: php properties readonly