如何在PHP中覆盖类常量?

时间:2015-02-23 03:21:41

标签: php oop constants

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

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

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

参考文献:

1 个答案:

答案 0 :(得分:3)

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

class Foo extends Bar {
    const BAZ = 42;
}

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

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

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

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

class Bar {
    const BAZ = BAZ;
}

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

Bar::setBaz(42);