如何覆盖 PHP 中的类常量?

hen*_*ght 2 php oop constants

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

if ( ! defined( 'MY_CONST' ) )
    define ( 'MY_CONST', 10 );
Run Code Online (Sandbox Code Playgroud)

我现在已经开始使用类 (OOP),并且想知道是否有一种方法可以定义一个类常量,以允许最终用户覆盖该值?

参考:

dec*_*eze 6

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

class Foo extends Bar {
    const BAZ = 42;
}
Run Code Online (Sandbox Code Playgroud)

是否Bar已经定义了BAZ常量并不重要。您在代码中要做的就是确保使用后期静态绑定引用“当前类”常量:

public function useConst() {
    echo static::BAZ;
}
Run Code Online (Sandbox Code Playgroud)

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

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

class Bar {
    const BAZ = BAZ;
}
Run Code Online (Sandbox Code Playgroud)

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

Bar::setBaz(42);
Run Code Online (Sandbox Code Playgroud)

  • 的确。如果内容具有延展性,则它可能不是*常量*。:o) (2认同)