首页 > 解决方案 > 带 goto 的 PHP 数字大小写

问题描述

我愉快地发现可以在 PHP中使用 goto :

    case 222: return "A"; break;
    case 231: return "B"; break;
    case 234: goto 231;
    case 237: return "C"; break;
    case 251: goto 231;
    case 285: return "D"; break;

我有一些这样的代码。有很多键共享相同的值,所以我尝试使用 goto 来消除冗余。我使用了一个开关,因为它在这里比 if/else 分支更简单。

由于各种原因,每个案例都必须如上所述明确定义,即使它只是针对另一个案例。但是,通过验证器运行它,我得到Parse error: syntax error, unexpected ''231'' (T_CONSTANT_ENCAPSED_STRING), expecting identifier (T_STRING) in your code

我尝试用单引号将这些案例括起来,但这仍然没有通过。这似乎与上面的示例一致。我在这里缺少什么语法?

标签: php

解决方案


标签不能只是数字,因此您只能通过为cases您想要定位的额外标签(并gotos使用这些新标签进行修改)来解决它:

<?php

function foo($value) {
    switch ($value) {
        case 222:
            return "A";
        case 231:
            label231: // new label here
            return "B";
        case 234:
           goto label231;
        case 237:
           return "C";
        case 251: 
           goto label231;
        case 285:
           return "D";
    }
}

var_dump(foo(251));

但是,正如评论中提到的,我更喜欢选择不同的方法(关联数组等)。


推荐阅读