Enums in PHP 5.3
本问题已经有最佳答案,请猛点这里访问。
在php 5.3之前,我使用以下自制函数创建枚举:
1 2 3 4 5 6 7 8 9 | 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() |
然后:
1 | enum('CONST0', 'CONST1', 'CONST2', ...); |
使用php 5.3,我可以使用const而不是define来从名称空间中获益。有没有方法可以修改这个函数使其使用const关键字?
另外,我只使用5.3来使代码看起来更干净,如果一定有性能影响(例如,使用eval或类似的东西),我将坚持好的旧定义。
我已经研究过这个问题:PHP和枚举,但是我没有找到我要找的。
我将尝试回答您的问题:是否有方法可以修改此函数以使其使用const关键字?
简短回答:否
长话短说:是的,你可以,但只能以一种非常尴尬的方式:
1 2 3 4 5 6 7 8 | <?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上测试
你不能有条件地使用
如果您想给常量命名,最好的方法是让它们成为类的静态字段,如果需要的话,可以利用magic
编辑:当然,在静态上下文中没有魔力设置器/getter,您无论如何都可以提供一个灵活的解决方案。