我想知道为什么我的静态变量初始化不适用于以下声明:
function validate()
{
static $timezones = DateTimeZone::listIdentifiers(); // Error here
...
}
static ...
行会生成错误:
PHP致命错误:常量表达式包含无效操作
但是,如果我执行以下操作,它会按预期工作:
function validate()
{
static $timezones = null;
if(!isset($timezones))
{
$timezones = DateTimeZone::listIdentifiers();
}
...
}
所以我解决了这个问题,但我想知道为什么第一种方法失败了?
答案 0 :(得分:2)
基于php文档;您不能使用另一个非常量表达式或变量初始化静态变量。
这意味着如果要为静态变量赋值,则该值应为整数,字符串等。
你在这里做的是反对PHP中的静态字规则你为 $ timezones 变量赋予动态值
static $timezones = DateTimeZone::listIdentifiers(); // Error here
检查详细信息。
http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static