我有以下枚举:
abstract class DaysOfWeek
{
const Sunday = 0;
const Monday = 1;
// etc.
}
如何修改以下函数以根据上面的enum
生成数组?
public function getOptions()
{
return [
0 => 'Sunday',
1 => 'Monday',
];
}
为此目的使用 SplEnum
不是更好吗?
最佳答案
我不确定使用 Splenum 是否更好,但我知道这可以使用 ReflectionClass 来完成。假设您希望在扩展 DaysOfWeek 的类中定义 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 函数的更紧凑、更高效的版本,它使用 native PHP 函数:
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
编辑2:如果 getOptions 位于不扩展 DaysOfWeek 的类中,您可以简单地引用类名,如下所示:
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());
关于php - 如何将 php 枚举转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677781/