PHP-CLI 5.4 - 转到替代方案

PHP-CLI 5.4 - GOTO Alternative

我正在开发一个 PHP-CLI (PHP 5.4+) 应用程序,我不得不在需要邪恶 goto 的地方分手。

示例:

<?PHP

// I use PHP  League CLImate and I load it here
/*
 *
 * Many lines of different code and output
 *
 */

MAIN_MENU:
// Some checks which will affect menu below
$climate->clear();
$climate->white("1. Eat sandwich");
$climate->white("2. Eat apple");
$input = $climate->white()->input('Lets go and:');
$input->accept([1, 2]);
$option = $input->prompt();
switch ($option) {
    case 1:
        // Eat sandwich and show output
        // Show some more output
        // Pause a bit
        GOTO MAIN_MENU;

    case 2:
        // Eat apple and show output
        // Show some more output
        // Pause a bit
        GOTO MAIN_MENU;
}

我觉得我有使用邪恶的理由goto。不幸的是,从 PHP 5.3 开始,goto 已经不存在了。 有 GOTO,但是还有其他方法吗?

我需要使用 PHP 5.4+ 因为 PHP 5.4 是 PHPLeague CLImate 支持的最旧的版本。
所以,基本上,它为用户提供了一些选项,用户选择一个选项,它完成任务,然后它应该返回主菜单。

您可以使用 continue 语句模拟此行为:

while (true) {

    // Some checks which will affect menu below
    $climate->clear();
    $climate->white("1. Eat sandwich");
    $climate->white("2. Eat apple");
    $input = $climate->white()->input('Lets go and:');
    $input->accept([1, 2]);
    switch ($input->prompt()) {
        case 1:
            // Eat sandwich and show output
            // Show some more output
            // Pause a bit
            continue 2;

        case 2:
            // Eat apple and show output
            // Show some more output
            // Pause a bit
            continue 2;
    }
}

备案,goto was added in 5.3,未删除。

所以它工作得很好并且被许多项目使用(主要是解析器和状态机)。