static в php ведет себя странно, не может принимать функции - PullRequest
4 голосов
/ 09 января 2012

Этот код выдает ошибку разбора, чего я не понимаю почему.

function t(){
 return 'g';
}
function l(){
    static $b = t();
    return $b;
}
l();

Вопрос в том, почему?

Ответы [ 2 ]

10 голосов
/ 09 января 2012

Цитирование из руководства:

Примечание:

Попытка присвоить значения этим [статическим] переменным , которые являются результат выражений вызовет ошибку разбора.

(мой акцент)

c.f. http://www.php.net/manual/en/language.variables.scope.php Пример # 7

7 голосов
/ 09 января 2012

static значения переменных заполняются на этапе синтаксического анализа источника, поэтому они не могут содержать непостоянные значения.

Вы можете реализовать инициализацию значения с помощью чего-то вроде:

function l(){
    static $b;
    if (!$b) $b = t();
    return $b;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...