PHP - почему я не мог объявить статическую переменную const?

Я бы использовал их для реализации шаблона factory, например:

class Types{
   static const car = "CarClass";
   static const tree = "TreeClass";
   static const cat = "CatClass";
   static const deathstar = "DeathStarClass";
}

И я хотел бы использовать их как:

$x = new Types::car;

Возможно ли это?

А что, если мой класс имеет параметр в конструкор, это не работает:

$x = new Types::car(123);

Ответ 1

Ваш код должен быть:

class Types{
   const car = "CarClass";
   const tree = "TreeClass";
   const cat = "CatClass";
   const deathstar = "DeathStarClass";
}

Обратите внимание: поскольку константы привязаны к определению класса, они по определению статичны.

Из Документов:

Начиная с PHP 5.3.0, возможно ссылайтесь на класс, используя переменную. Значение переменной не может быть ключевое слово (например, self, parent и статический).

http://www.php.net/manual/en/language.oop5.static.php

Дополнительная информация:

http://php.net/manual/en/language.oop5.constants.php

Ответ 2

Константы уже статичны в том смысле, что они не привязаны к экземпляру класса. Вот как их определить и использовать, как вы хотите:

class Types{
   const car = "CarClass";
   const tree = "TreeClass";
   const cat = "CatClass";
   const deathstar = "DeathStarClass";
}

$x = Types::car;

Ответ 3

Это постоянная. Вы не можете его изменить. Поэтому не имеет никакого смысла, что у вас будет нестатический постоянный член. Поэтому вам не нужно объявлять их как статические или переменные класса.