使用常量时,我总是尝试定义如下常量,以允许最终用户覆盖它们的值。
if ( ! defined( 'MY_CONST' ) )
define ( 'MY_CONST', 10 );
Run Code Online (Sandbox Code Playgroud)
我现在已经开始使用类 (OOP),并且想知道是否有一种方法可以定义一个类常量,以允许最终用户覆盖该值?
参考:
如果您的用户正在扩展您的类,他们可以重新定义常量就好了:
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)