我正在开发一个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,但还有其他方法吗? goto
。不幸的是,从PHP 5.3开始,goto
不再存在。
我需要使用PHP 5.4+,因为PHP 5.4是PHPLeague CLImate支持的最旧版本。
所以,基本上,它为用户提供了一些选项,用户选择了一个选项,它完成任务,然后它应该回到主菜单。
答案 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;
}
}