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

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

public static $user_table = TABLE_PREFIX . 'users';

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

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

Ответ 2

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