使用串联在 PHP 类中启动/声明常量

发布于 2024-10-19 17:27:13 字数 243 浏览 0 评论 0原文

class Foo 
{

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

public function __construct() {}

}

这给出了错误:

语法错误,意外的“.”, 期待 ',' 或 ';'

那么我应该如何使用常量连接呢?

class Foo 
{

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

public function __construct() {}

}

This gives error :

syntax error, unexpected '.',
expecting ',' or ';'

Then how I am supposed to use concatenation with constants?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哥,最终变帅啦 2024-10-26 17:27:13

您不能在那里分配表达式。您只能在类定义中定义普通值。

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

You cannot assign expressions there. You can only define plain values in a class definition.

The only workaround here would be to use runkit_constant_add() in the constructor, which is not available on all PHP setups.

空‖城人不在 2024-10-26 17:27:13

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

我不建议您使用 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);

Constants, should be, constants, it's why you can't work with expression here.

I don't advise you the runkit_constant_add() as it transforms a constant in a variable (or kind of) which is not the case and can be confusing.

To resolve this issue, I usually "wrap" my constant in a protected array.
Use the constant to be used a key of an array, to have more complex expressions.

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];
    }
}

And let you use:

$foo = new Foo();
$foo->getMessage(Foo::YEAR);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文