У меня очень простая проблема, когда я пытаюсь установить значение частного статического свойства, состоящего из константы, к которой добавляется такой текст:
private static $cssDirectory = APP_ROOT.'css/';
Я получаю синтаксическую ошибку. Я могу исправить это, сделав личную переменную не статичной, и, например, присвоить значение конструктору, но, поскольку я хочу, чтобы она была статической, мне интересно, что я могу с этим поделать. Я также могу сделать константу для всего значения и использовать ее, но опять же мне любопытно, почему я не могу сделать это так, как пытался. Может быть, я тоже что-то не так делаю. Благодарю.
Из документов PHP
Переменные-члены класса называются «свойствами» … Они определяются с помощью одного из ключевых слов public, protected или private, за которым следует обычное объявление переменной. Это объявление может включать в себя инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть в состоянии быть оцененной во время компиляции и не должна зависеть от информации времени выполнения для оценки.
Конкатенация является операцией во время выполнения.
Вам не нужно создавать экземпляры и устанавливать значение свойства в конструкторе …. вместо этого вы можете написать метод статического установщика
Обратите внимание, что PHP 5.6 позволяет этот тип инициализации свойств класса
РЕДАКТИРОВАТЬ
Пример метода статического сеттера:
private static $cssDirectory;
public static setCssDirectory() {
self::$cssDirectory = APP_ROOT.'css/';
}
И тогда вы просто позвоните
myClassName::setCssDirectory();
прежде всего
Других решений пока нет …