通过实例访问类的常量是不好的做法吗?

时间:2015-10-21 13:57:59

标签: php

class A {
    const FOO = 'bar';
}

$a = new A();


// 1.
echo A::FOO;

// 2.
echo $a::FOO;

选项1.或2.更清洁还是相同?

1 个答案:

答案 0 :(得分:1)

唯一的区别是A::FOO总是指一个非常具体的,不变的常量。 $a::FOO引用的值取决于$a是什么,可能会发生变化。这允许您子类化A并覆盖该子类中的FOO。通常,$a::FOO允许更多的“鸭子打字”样式编程而不是硬编码类名。因此,这根本不是一个坏主意。

在子类中重写常量是否是一个绝妙的主意是一个不同的主题,但如果仔细应用它可以有其用途。