Ответ 1
Статические свойства класса инициализируются во время компиляции. Вы не можете использовать константу 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: возможны некоторые ограниченные выражения, если они могут быть оценены во время компиляции.