如何覆盖 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);
在使用常量时,我总是尝试像下面这样定义常量,以允许最终用户覆盖它们的值。
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);