class foo
{
const bar;
}
要访问它,我们必须:self::bar;
而不是$this->bar;
这是对的吗?如果是这样,为什么?
答案 0 :(得分:6)
是的,这是正确的。原因是一个常量是类绑定的,而一个属性是实例绑定的,因此通过引用访问它是没有多大意义的。无论你创建多少个实例,总会只有一个foo :: bar const。
这只是一个语言设计决定,通过引用访问const是不可能的,例如,在Java中,您确实可以通过引用访问静态final属性,但通常会收到编译器警告。
答案 1 :(得分:2)
好吧,因为它们是常量,这意味着它们是静态的(常量和静态是同义词),如果每个实例都没有更改,那么每个实例都有一个没有意义,所以每个类都有它们。使用::
访问静态成员。
答案 2 :(得分:1)
值得注意的是,迄今为止遗漏的是常量只能包含原始值的事实。它们一旦设置也无法更改,尝试在之后设置已经声明的值将导致parse error
。
只有在每个类的实例都需要你的属性时,你才应该使用常量,当然还需要修复它。