#php #loops #error-handling #goto
#php #циклы #обработка ошибок #goto
Вопрос:
Я использую goto
, если есть какая-либо ошибка, и она начнется снова вверху.
Я также не могу использовать goto
в функции для перехода за пределы функции.
Я знаю, goto
это плохо, но как бы while
цикл вписался в мой код?
Например:
$ch = curl_init();
retry:
$result = curlPost($ch, "home.php", http_build_query($arg));
if (strpos($postResult, "Welcome") !== false) {
sleep(10);
goto retry;
}
$sql = "SELECT * FROM data";
$q = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($q)) {
$name['something'] = $row['name'];
submitData($ch,$name);
}
function submitData($ch,$name) {
$result2 = curlPost($ch, "submit.php", http_build_query($name));
if (strpos($postResult, "Website close") !== false) {
sleep(10);
goto retry; //goto wouldnt work.
}
// do something here
}
Комментарии:
1. Это подойдет лучше, чем goto.
2. @Phantom Публикует ответ, используя
while
цикл с моим примером.
Ответ №1:
В принципе, у вас было бы что-то вроде этого:
$success = false;
while(!$success) {
// do stuff here
// psuedocode follows:
if failure {
continue; // skip remainder of `while` and retry
}
if complete {
$success = true; // loop will end
// or "break;" to exit loop immediately
}
}
Просто имейте в виду, что если ваш «if failure» сам по себе находится внутри цикла, вам понадобится continue 2;
. Или если вы находитесь во вложенном цикле, continue 3;
и так далее.
Комментарии:
1. Спасибо, это было полезно. Я думаю, мне удалось заменить мой пример, используя
while
цикл .. не могли бы вы проверить, правильно ли это? pastebin.com/U5Bpkt7A2. Почти. Просто
false
опечатано какflase
и вам не нужно$tryAgain
. Также повторите попытку сsubmitData
логикой в обратном направлении. Попробуйте это