Переменные статической функции и конкатенация в PHP

Рассмотрим следующее:

$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function. 

Как только я отмечаю $var как static , однако:

 static $var = 'foo' . 'bar'; 

PHP (5.3.1 в настройке WAMP) жалуется на следующую ошибку:

Ошибка анализа : синтаксическая ошибка, неожиданные '.', Ожидающие ',' или ';'

Кажется, что конкатенация строк является виновником здесь.


Что тут происходит? Может кто-нибудь объяснить правила для статических переменных для меня?

    В руководстве указано состояние переменных :

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

    Здесь также упоминается ключевое слово Static :

    Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются.

    Хотя следует отметить, что свойство, статическое или нет, не может быть инициализировано с использованием выражения.

    Вы не можете выполнять выражения в инициализаторах. Вы можете, однако, сделать следующее:

     define('FOOBAR', 'foo'.'bar'); static $var = FOOBAR; echo $var; 

    Малоизвестный факт состоит в том, что хотя инициализаторы не могут содержать выражения времени выполнения, они могут содержать константы, которые могут быть определены и разрешены во время выполнения. Константа должна определяться временем, когда используется сначала $var , в противном случае вы получите строку, идентичную константе (например, "FOOBAR" ).

    Я делаю это:

     class MyClass { static $var1; static $var2; public static function _init() { self::$var1 = 'slkslk' . 'sksks' . 'arbitrary' ; self::var2 = <<<EOT <root> <elem1>skjsksj</elem1> </root> EOT; } } MyClass::_init();