Intereting Posts
Проверьте, существует ли определенный массив ключей в многомерном массиве – PHP Как передать переменную JS в php? Использование метода статического класса для * Быстро * Сортировка массива по ключевым значениям в PHP Устранение неполадок PHP Mail Как я могу получить возвращаемое регистром возвращение из array_intersect () PHP / MySQLi: установить lc_time_names и DATE_FORMAT () в запрос mysqli? События модели Laravel – я немного смущен тем, где они предназначены Предупреждение: Memcached :: getMulti (): не удалось выполнить инициализацию значения, без поддержки Как многопользовательская работа с использованием Codeigniter famework (PHP)? Как получить количество часов до полуночи с помощью PHP PHP unserialize jQuery FORM post symfony выдают себя за разных хостов В PHP, как вы можете очистить кеш WSDL? Необычная ошибка при попытке подключения к базе данных логин на сайте без пароля и имени пользователя использовать пользовательскую форму активный домен каталога

Ошибка синтаксиса статического свойства PHP OOP

Почему

public static $CURRENT_TIME = time() + 7200; 

работа (ошибка):

Ошибка анализа: синтаксическая ошибка, неожиданная '('

но

 class Database { public static $database_connection; private static $host = "xxx"; private static $user = "xxx"; private static $pass = "xxx"; private static $db = "xxx"; public static function DatabaseConnect(){ self::$database_connection = new mysqli(self::$host,self::$user,self::$pass,self::$db); self::$database_connection->query("SET NAMES 'utf8'"); return self::$database_connection; } } 

работает.

Я новичок в ООП, я так смущен.

Solutions Collecting From Web of "Ошибка синтаксиса статического свойства PHP OOP"

Вы не можете инициализировать любую переменную-член (свойство) с не константным выражением. Другими словами, нет вызывающих функций там, где вы его объявляете.

Из руководства по PHP :

Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.

Лучший ответ, который я могу дать, почему ? Поскольку инициализаторы статического поля не работают с каким-либо контекстом. Когда вызывается статический метод, вы находитесь в контексте этого вызова функции. Когда задано нестатическое свойство, вы находитесь в контексте конструктора. В каком контексте вы устанавливаете статическое поле?

Члены класса могут содержать только константы и литералы, а не результат вызовов функций, поскольку это не постоянное значение.

Из руководства PHP :

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому, хотя вы можете инициализировать статическое свойство для целого или массива (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом.

Они объясняют, почему это не работает. Это будет работать.

 class SomeClass { public static $currentTime = null; __construct() { if (self::$currentTime === null) self::$currentTime = time() + 7200; } } 

Другие уже объяснили, почему вы не можете. Но, возможно, вы ищете работу ( Demo ):

 My_Class::$currentTime = time() + 7200; class My_Class { public static $currentTime; ... } 

Вы не ищете конструктора, вы ищете статическую инициализацию.