【问题标题】:Why can't i use an constant in an class field/attribute?为什么我不能在类字段/属性中使用常量?
【发布时间】:2014-07-05 19:06:48
【问题描述】:

例子:

const USERNAME_MIN_LENGTH = '2';
private $uesrname_error_message= 'ERROR: Max. username length is ' . USERNAME_MIN_LENGTH;

上面提供的代码出现此错误:

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

错误发生在定义 $test 变量的行。

我正在使用PHP 5.5.12 版本。

为什么?

【问题讨论】:

  • 在声明类属性时不能连接值。为此使用构造函数。尽管对于您的示例,无论哪种方式都没有任何意义。
  • 我想为消息创建一个常量,但我不能在另一个常量中包含一个常量。或者我可以吗?
  • @PeeHaa 我会的。谢谢。
  • 恕我直言,没有理由为这样的东西创建一个常量。如果要求发生变化,您将不得不进入实际课程来更改它。如果语言发生变化,您基本上没有选择。如果您需要添加更多测试,您也有点卡住了。
  • 没有实际的文本应该由一个专门的翻译对象在这个类之外处理。

标签: php class constants


【解决方案1】:

PHP(尚)不支持属性声明中的表达式。从 PHP 5.6 开始,一些表达式将被允许。您可以在PHP's wiki 上阅读更多相关信息。

您的具体示例应该在 PHP 5.6 中工作。

【讨论】:

  • 很高兴知道。 PHP 5.5 有解决方法吗?因为我现在无法在我的服务器上升级到PHP 5.6。 :( +1
  • 我认为您已经接受了解决方法;)但是是的.. 缺乏对这些表达式的支持意味着您需要在构造函数中执行此操作。
  • 我知道我已经接受了解决方法。但是知道是否有其他的做事方式总是很好的。如果应该有更好的解决方案,我总是可以更改我接受的答案。 ;)
【解决方案2】:

您需要像这样在构造函数中定义变量$test

class yourClass{
    private $test;
    function __construct(){
        const USERNAME_MIN_LENGTH = '2';
        $this->test = 'Max. username length is ' . USERNAME_MIN_LENGTH;
    }
}

这只适用于PHP 5.6:

private $test = 'Max. username length is ' . USERNAME_MIN_LENGTH;

【讨论】:

  • @tastro 你试过我的建议了吗?
  • 我现在做到了,它可以工作。谢谢!但这是一种奇怪的方法。 :/ OMG 在 PHP。 xD
  • 我选择这个答案作为我接受的答案,因为它为我的问题提供了解决方案。但我认为有这个问题的人也应该阅读@Evert 答案。很高兴知道为什么会这样。
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2010-12-02
  • 2014-12-20
  • 1970-01-01
相关资源
最近更新 更多