为什么需要静态检索类声明的常量?

时间:2010-10-08 13:52:29

标签: php static constants

class foo 
{
    const bar;
}

要访问它,我们必须:self::bar;而不是$this->bar;

这是对的吗?如果是这样,为什么?

3 个答案:

答案 0 :(得分:6)

是的,这是正确的。原因是一个常量是类绑定的,而一个属性是实例绑定的,因此通过引用访问它是没有多大意义的。无论你创建多少个实例,总会只有一个foo :: bar const。

这只是一个语言设计决定,通过引用访问const是不可能的,例如,在Java中,您确实可以通过引用访问静态final属性,但通常会收到编译器警告。

答案 1 :(得分:2)

好吧,因为它们是常量,这意味着它们是静态的(常量和静态是同义词),如果每个实例都没有更改,那么每个实例都有一个没有意义,所以每个类都有它们。使用::访问静态成员。

答案 2 :(得分:1)

值得注意的是,迄今为止遗漏的是常量只能包含原始值的事实。它们一旦设置也无法更改,尝试在之后设置已经声明的值将导致parse error

只有在每个类的实例都需要你的属性时,你才应该使用常量,当然还需要修复它。