【问题标题】:"PHP Fatal error: Constant expression contains invalid operations", when initializing a static inline?“PHP致命错误:常量表达式包含无效操作”,初始化静态内联时?
【发布时间】:2018-02-24 03:09:44
【问题描述】:

我想知道为什么我的静态变量初始化不适用于以下声明:

function validate()
{
    static $timezones = DateTimeZone::listIdentifiers(); // Error here

    ...
}

带有static ... 的行会产生错误:

PHP 致命错误:常量表达式包含无效操作

但是,如果我执行以下操作,它会按预期工作:

function validate()
{
    static $timezones = null;
    if(!isset($timezones))
    {
        $timezones = DateTimeZone::listIdentifiers();
    }
    ...
}

所以我有办法解决这个问题,但我想知道为什么第一种方法失败了?

【问题讨论】:

  • 请停止标签垃圾邮件。你的帖子不可能同时是 C++ 和 PHP,那绝对不是你发布的 C++ 代码。你不是新来的;你知道标签是如何工作的。停止随机添加它们。
  • 错误信息中解释了为什么失败。
  • @KenWhite 啊...抱歉,这是一个建议的标签,因为我也做了很多 C++...感谢您的编辑。

标签: php compiler-errors php-7


【解决方案1】:

基于php文档;您不能使用另一个非常量表达式或变量来初始化静态变量。

这意味着如果你想给静态变量赋值,这个值应该是一个整数、字符串等。

您在这里所做的是违反 PHP 中的静态单词规则,您正在为 $timezones 变量分配动态值

static $timezones = DateTimeZone::listIdentifiers(); // Error here

查看详细信息。

http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

【讨论】:

  • 啊,你给了我们错误的链接,正确的链接是这个:php.net/manual/en/… 因为我的示例在函数中显示静态变量,而不是在对象中。并且不需要常数。你可以有一个表达式,但不能有函数调用。
  • 我正在改变我的答案。
猜你喜欢
  • 2017-05-16
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2020-06-27
  • 2017-04-11
相关资源
最近更新 更多