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


Is it a bad practice to access a class's constant via an instance?

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允许更多的"鸭子类型"样式编程,而不是硬编码类名。因此,这根本不是一个坏主意。

覆盖子类中的常量是否是一个绝妙的想法是一个不同的主题,但如果谨慎应用,它可以有它的用途。

相关文章: