Рассмотрим следующее:
$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();