php - 如何将 php 枚举转换为数组?

标签 php arrays enums spl

我有以下枚举:

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/

相关文章:

c# - 如何避免在 C# 中使用枚举重复代码?

java - 类内的私有(private)枚举

c# - 无法访问/找到公共(public)枚举/类

php - 错误 :org. apache.http.conn.HttpHostConnectException : Connection to http://10. 0.2.2:8080 被拒绝

php - 简单的联系表格不起作用

java - 将字符串数组转换为 double 组(原始类型)的最佳做法是什么

php - 调用时传递引用错误,无法修复代码

python - 与 numpy 对象数组相比,列表列表在速度方面有哪些优点/缺点?

php - Perl 相当于 PHP 的 get_file_contents()?

PHP 面向对象 : Best strategy for dealing with form posts?