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