【发布时间】:2011-07-18 01:33:55
【问题描述】:
PHP 接口允许在接口中定义常量,例如
interface FooBar
{
const FOO = 1;
const BAR = 2;
}
echo FooBar::FOO; // 1
任何实现类都会自动提供这些常量,例如
class MyFooBar implement FooBar
{
}
echo MyFooBar::FOO; // 1
我自己的看法是that anything Global is Evil。但我想知道这是否同样适用于接口常量。鉴于针对接口进行编码通常被认为是一种好的做法,那么使用接口常量是唯一可以在类上下文之外使用的常量吗?
虽然我很想听听您的个人意见以及您是否使用接口常量,但我主要是在您的回答中寻找客观原因。我不希望这是一个民意调查类型的问题。我对使用接口常量对可维护性的影响感兴趣。耦合。或单元测试。它与SOLID PHP 有什么关系?它是否违反任何被认为是 PHP 中良好实践的编码原则?你明白了……
注意: 有一个 similar question for Java 列出了一些很好的理由说明它们是 Bad Practice,但由于 Java 不是 PHP,我觉得在再次 PHP 标记。
【问题讨论】:
-
嗯,我从来没有遇到过在接口中定义常量的需要。值得知道的是,实现接口的类不能覆盖常量,而只是相互扩展的类可以覆盖常量。
-
我相信常量并不坏,因为即使我们关心单元可测试性,它们也具有可预测的值。全局变量是邪恶的,因为任何人都可以更改它,因为它是一个变量,并且所有内容都有范围,但常量永远不会改变它的值,因此术语常量。