如何覆盖 PHP 中的 class 常量?

How to override a class constant in PHP?

在使用常量时,我​​总是尝试像下面这样定义常量,以允许最终用户覆盖它们的值。

if ( ! defined( 'MY_CONST' ) )
    define ( 'MY_CONST', 10 );

我现在开始使用 classes (OOP) 并想知道是否有一种方法可以定义 class 常量以允许值在结束时被覆盖-用户?

参考文献:

如果您的用户正在扩展您的 class,他们可以重新定义常量:

class Foo extends Bar {
    const BAZ = 42;
}

Bar 是否已经定义了一个BAZ 常量并不重要。您在代码中所要做的就是确保使用后期静态绑定引用 "current classes" 常量:

public function useConst() {
    echo static::BAZ;
}

否则,您可以选择这样做:

if (!defined('BAZ')) {
    define('BAZ', 42);
}

class Bar {
    const BAZ = BAZ;
}

虽然这不是很优雅。您应该在 class 上使用 getter 和 setter 来允许配置,而不是为此目的使用常量:

Bar::setBaz(42);