class A {
const FOO = 'bar';
}
$a = new A();
// 1.
echo A::FOO;
// 2.
echo $a::FOO;
选项 1. 或 2. 更清洁还是相等?
唯一的区别是A::FOO
将始终引用一个非常具体的、不变的常量。$a::FOO
指的是哪个值取决于$a
是什么,这可能会发生变化。这允许您A
子类并覆盖该子类中的FOO
。通常,$a::FOO
允许更多的"鸭子类型"样式编程,而不是硬编码类名。因此,这根本不是一个坏主意。
覆盖子类中的常量是否是一个绝妙的想法是一个不同的主题,但如果谨慎应用,它可以有它的用途。