PHP-CLI 5.4 - GOTO替代方案

时间:2015-05-06 22:12:29

标签: php command-line goto

我正在开发一个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支持的最旧版本。
所以,基本上,它为用户提供了一些选项,用户选择了一个选项,它完成任务,然后它应该回到主菜单。

2 个答案:

答案 0 :(得分:5)

记录goto was added in 5.3,未删除。

因此它工作得非常好,并被许多项目(主要是解析器和状态机)使用。

答案 1 :(得分:2)

您可以使用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;
    }
}