Я работаю над приложением PHP-CLI (PHP 5.4+) и попал туда, где зло идти к необходимо.
Пример:
<?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
, к несчастью goto
больше не существует с PHP 5.3.
Мне нужно использовать 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;
}
}
Для записи, гото было добавленной в 5.3, не удаляется
Так что он работает довольно хорошо и используется многими проектами (в основном парсерами и конечными автоматами).