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