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

Эта штука очень сильно меня раздражает. Я получаю ошибку Parse: синтаксическая ошибка, неожиданные '.', Ожидающие ',' или ';' на этой линии

public static $user_table = TABLE_PREFIX . 'users'; 

TABLE_PREFIX – это константа, созданная функцией define

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

Статические свойства класса инициализируются во время компиляции. Вы не можете использовать константу TABLE_PREFIX для конкатенации строковым литералом при инициализации статического свойства класса, поскольку значение константы неизвестно до выполнения. Вместо этого инициализируйте его в конструкторе:

 public static $user_table; // Initialize it in the constructor public function __construct() { self::$user_table = TABLE_PREFIX . 'users'; } // If you only plan to use it in static context rather than instance context // (won't call a constructor) initialize it in a static function instead public static function init() { self::$user_table = TABLE_PREFIX . 'users'; } 

http://us2.php.net/manual/en/language.oop5.static.php

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство для целого или массива (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.

Обновление для PHP> = 5.6

PHP 5.6 предоставил ограниченную поддержку выражений:

В PHP 5.6 и более поздних версиях те же правила применяются как выражения const: возможны некоторые ограниченные выражения, если они могут быть оценены во время компиляции.

Точка – оператор конкатенации строк. Это функция времени выполнения, поэтому ее нельзя использовать для объявления статического значения (parsetime).