Эта штука очень сильно меня раздражает. Я получаю ошибку Parse: синтаксическая ошибка, неожиданные '.', Ожидающие ',' или ';' на этой линии
public static $user_table = TABLE_PREFIX . 'users';
TABLE_PREFIX – это константа, созданная функцией define
Статические свойства класса инициализируются во время компиляции. Вы не можете использовать константу 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 и более поздних версиях те же правила применяются как выражения const: возможны некоторые ограниченные выражения, если они могут быть оценены во время компиляции.
Точка – оператор конкатенации строк. Это функция времени выполнения, поэтому ее нельзя использовать для объявления статического значения (parsetime).