-3

在 PHP 5.3 之前,我使用以下自制函数来创建枚举:

function enum()
{
    for($enums = func_get_args(), $enum = reset($enums), $i = 1; $enum; $enum = next($enums), ++$i)
    {
        if(defined($enum)) throw new Exception($enum.' is already defined.');
        else define($enum, $i);
    }

} // enum()

进而 :

enum('CONST0', 'CONST1', 'CONST2', ...);

使用 php 5.3,我可以使用 const 而不是 define 来从命名空间中受益。有没有办法可以修改此函数以使其使用 const 关键字?

此外,我只使用 5.3 来使我的代码看起来更干净,如果必须对性能产生影响(即使用 eval 或类似的东西),我会坚持使用旧定义。

我已经看过这个问题:PHP and Enumerations但我没有找到我要找的东西。

4

2 回答 2

1

您不能const有条件地使用关键字[请参阅这个投票率很高的答案]。

__get如果你想命名你的常量,最好的方法是让它们成为一个类的静态字段,__set如果你需要的话,可以利用魔法。

编辑:当然,在静态上下文中没有魔术设置器/获取器,无论如何您都可以提供灵活的解决方案。

于 2012-11-28T12:05:32.957 回答
1

我将尝试回答您的问题:有没有办法可以修改此函数以使其使用 const 关键字?

简短的回答:没有

长答案:是的,你可以,但只能以一种非常尴尬的方式:

<?php
function enum() {
    for($enums = func_get_args(), $enum = reset($enums), $i = 1; $enum; $enum = next($enums), ++$i) {
        eval('const ' . $enum . ' = ' . $i . ';');
    }
}

enum('CONST0', 'CONST1', 'CONST2');

在http://3v4l.org/ontRN上测试

于 2012-11-28T12:16:13.707 回答