如何将 php 枚举转换为数组?
How to convert php enum to array?
我有以下枚举:
abstract class DaysOfWeek
{
const Sunday = 0;
const Monday = 1;
// etc.
}
如何修改下面的函数,根据上面的enum
生成数组?
public function getOptions()
{
return [
0 => 'Sunday',
1 => 'Monday',
];
}
为了这个目的使用SplEnum
不是更好吗?
我不确定使用 Splenum 是否更好,但我知道这可以使用 ReflectionClass 来完成。假设您希望在扩展 DaysOfWeek 的 class 中定义 getOptions,您的代码可能如下所示:
abstract class DaysOfWeek
{
const Sunday = 0;
const Monday = 1;
// etc.
}
class myClass extends DaysOfWeek {
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
$retval = array();
foreach($constants as $name => $val) {
$retval[$val] = $name;
}
return $retval;
}
}
$o = new myClass();
var_dump($o->getOptions());
编辑:这是 getOptions 函数的更紧凑和高效的版本,它使用本机 PHP 函数:
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
编辑 2:如果 getOptions 在不扩展 DaysOfWeek 的 class 中,您可以像这样简单地引用 class 名称:
class AnotherClass {
public function getOptions() {
$oClass = new ReflectionClass(DaysOfWeek);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
}
$o = new AnotherClass();
var_dump($o->getOptions());
喜欢可以用SplEnum
,不过我觉得很难用。我更喜欢 Eloquent Enumeration 因为它支持 C++ 风格和 Java 风格的枚举,以及一系列获取值的方法。
如果您想自己推出,可以使用 ReflectionClass
检查常量,但请注意,如果您有一个添加常量的继承树,则必须是 bit clever. Otherwise, the answer from 效果很好。
我有以下枚举:
abstract class DaysOfWeek
{
const Sunday = 0;
const Monday = 1;
// etc.
}
如何修改下面的函数,根据上面的enum
生成数组?
public function getOptions()
{
return [
0 => 'Sunday',
1 => 'Monday',
];
}
为了这个目的使用SplEnum
不是更好吗?
我不确定使用 Splenum 是否更好,但我知道这可以使用 ReflectionClass 来完成。假设您希望在扩展 DaysOfWeek 的 class 中定义 getOptions,您的代码可能如下所示:
abstract class DaysOfWeek
{
const Sunday = 0;
const Monday = 1;
// etc.
}
class myClass extends DaysOfWeek {
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
$retval = array();
foreach($constants as $name => $val) {
$retval[$val] = $name;
}
return $retval;
}
}
$o = new myClass();
var_dump($o->getOptions());
编辑:这是 getOptions 函数的更紧凑和高效的版本,它使用本机 PHP 函数:
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
编辑 2:如果 getOptions 在不扩展 DaysOfWeek 的 class 中,您可以像这样简单地引用 class 名称:
class AnotherClass {
public function getOptions() {
$oClass = new ReflectionClass(DaysOfWeek);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
}
$o = new AnotherClass();
var_dump($o->getOptions());
喜欢可以用SplEnum
,不过我觉得很难用。我更喜欢 Eloquent Enumeration 因为它支持 C++ 风格和 Java 风格的枚举,以及一系列获取值的方法。
如果您想自己推出,可以使用 ReflectionClass
检查常量,但请注意,如果您有一个添加常量的继承树,则必须是 bit clever. Otherwise, the answer from