командная строка — PHP-CLI 5.4 — GOTO Alternative

Я работаю над приложением 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 больше не существует с PHP 5.3. Есть GOTO, но есть ли альтернативный способ?

Мне нужно использовать PHP 5.4+, потому что PHP 5.4 является самым старым из поддерживаемых PHPLeague CLImate.
Таким образом, в основном, он предлагает пользователю несколько опций, пользователь выбирает опцию, выполняет задачу и затем должен вернуться в главное меню.

0

Решение

Вы можете смоделировать это поведение с 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;
}
}
2

Другие решения

Для записи, гото было добавленной в 5.3, не удаляется

Так что он работает довольно хорошо и используется многими проектами (в основном парсерами и конечными автоматами).

5

По вопросам рекламы [email protected]