class A {
const FOO = 'bar';
}
$a = new A();
// 1.
echo A::FOO;
// 2.
echo $a::FOO;
选项1.或2.更清洁还是相同?
答案 0 :(得分:1)
唯一的区别是A::FOO
总是指一个非常具体的,不变的常量。 $a::FOO
引用的值取决于$a
是什么,可能会发生变化。这允许您子类化A
并覆盖该子类中的FOO
。通常,$a::FOO
允许更多的“鸭子打字”样式编程而不是硬编码类名。因此,这根本不是一个坏主意。
在子类中重写常量是否是一个绝妙的主意是一个不同的主题,但如果仔细应用它可以有其用途。