使用连接在PHP类中启动/声明常量

时间:2011-02-26 07:52:49

标签: php constants concatenation

class Foo 
{

const MY_CONST = 'this is ' . 'data' ;  //use of concatenation

public function __construct() {}

}

这会出错:

  

语法错误,意外'。',   期待','或';'

然后我应该如何使用常量连接?

2 个答案:

答案 0 :(得分:3)

您无法在那里指定表达式。您只能在类定义中定义普通值。

这里唯一的解决方法是在构造函数中使用runkit_constant_add(),这在所有PHP设置中都不可用。

答案 1 :(得分:1)

常量,应该是常量,这就是为什么你不能在这里使用表达式。

我不建议runkit_constant_add(),因为它会变量变量(或某种变量)中的常量,但事实并非如此。

要解决此问题,我通常会将我的常量“包装”在受保护的数组中。 使用常量来使用数组的键,以获得更复杂的表达式。

class Foo {
    const YEAR = 'year';
    const DAYS = 'days';

    protected $_templates = array(
        self::YEAR => 'There is %s' . 'year ago',
        self::DAYS => 'There are ' . '%s' . 'days ago',
    );

    public function getMessage($key)
    {
        return $this->_templates[$key];
    }
}

让你使用:

$foo = new Foo();
$foo->getMessage(Foo::YEAR);