У меня есть перечисление как это.
class TPNF_SplEnum extends SplEnum {
public static function InitList() {
$instance = new static;
static::$List = array_flip($instance->getConstList());
}
public static function GetName($key) {
return static::$List[$key];
}
public static function GetList() {
return static::$List;
}
}class TPNF_Model_Url_ERelative extends TPNF_SplEnum {
protected static $List;
const __default = self::None;
const None = 0;
const Admin = 1;
const Content = 2;
const Includes = 3;
const Plugins = 4;
const Site = 5;
const Theme = 6;
const Themes = 7;
}
И я хотел бы включить значение int в это перечисление, но оно не работает.
$url->Relative = new TPNF_Model_Url_ERelative((int)'2');
который выводится (используя print_r):
TPNF_Model_Url_ERelative Object ( [__default] => 2 )
вместо
TPNF_Model_Url_ERelativeContent
Я неправильно понял, что такое SplEnum.
Вы можете назначать их значения переменным, но не самим себе, как если бы это были объекты.
Чтобы преобразовать их значение в имя константы и наоборот, нет другого способа, кроме как создать для этого функции. Функции, которые могут быть использованы ->getConstList
Других решений пока нет …