Есть ли способ разбить if
заявление как while
?Есть ли способ разбить оператор, например, как
while(true) {
break;
}
if(true) {
//break if
} else {
//continue execution here or miss if at all
}
Есть ли способ разбить if
заявление как while
?Есть ли способ разбить оператор, например, как
while(true) {
break;
}
if(true) {
//break if
} else {
//continue execution here or miss if at all
}
Да, с помощью goto
. Используйте это с осторожностью, так как это, как правило, указывает на неправильные привычки кода в других местах. У этого есть законное использование, хотя (например, вырваться из вложенных циклов).
http://php.net/manual/en/control-structures.goto.php
Я думаю, что ваш вопрос плохо сформулирован. Я думаю, что это проблема у вас возникли:
if(foo) {
if(bar) {
baz();
} else {
qux();
}
} else {
qux();
}
Вы хотите упростить это так, что qux()
нужно быть выражены только один раз, а не два раза. Возможное решение с использованием goto
существует:
if(foo) {
if(bar) {
baz();
} else {
goto quxLabel;
}
} else {
quxLabel:
qux();
}
Это работает, но я думаю, что лучшее решение (если это возможно в вашем случае), чтобы составить ваши условия ветвления. Это требует, чтобы вы были в состоянии оценить bar
независимо от foo
, так что я не знаю, если это применимо в вашем случае:
if(foo && bar) baz();
else qux();
Если bar
зависит от foo
, то вы можете использовать эту технику, но воспользоваться поведение короткого замыкания оператора &&
:
if(foo && computeBar(foo)) baz();
else qux();
Я знаю, что использование закладок не является хорошим стилем кодирования, но может быть единственным способом сделать это. –
if(true){
goto end;
}
else {
continue execution here or miss if at all
}
end:
/* your statement*/
вы хотите попробовать exit() function –
'exit()' завершает _all_ будущего исполнения. Это не похоже на то, о чем просят. –
попробуйте метод возврата –
try {
if (...) {
do_something();
...
throw new \Exception(); // Break here
...
}
} catch (\Exception $e) {}
// Resumes here:
do_something_now()
Использование исключений, как правило, лучший способ вырваться из петли (или что-нибудь еще). Они используются для указания ошибки, но могут быть пойманы и обработаны там, где вам нравится.
Это может быть правильно, если возникает необработанное условие, но это не обычный случай для выхода из структуры цикла. – SaschaM78
Нет, но разрыв условностей не является обычным случаем хе. Тем не менее, если вы имеете дело с глубоко вложенными циклами (что само по себе является запахом кода), использование исключений для управления потоком данных, когда что-то неожиданное происходит, вероятно, лучший способ сделать это (конечно, лучше, чем разбить несколько уровней, т.е. 3; '). – AlpineCoder
Вы правы, если мы говорим о выходе из программы во время выполнения неожиданного условия (например, в вашем примере), но это не обязательно верно в отношении операторов цикла (т. Е. Представьте себе цикл коллекции до тех пор, пока не будет найден конкретный элемент). – SaschaM78
Просто, инвертировать порядок и использовать !
:
<?php
if(!true){
echo "execution here or miss if at all";
} else {
echo "Nothing";
}
Смотреть это DEMO: http://codepad.org/XdFKfY9R
if
-statement используется для ветвления кода без повторения, поэтому нет никакой необходимости в break
конструктора. Это другое дело, когда вы используете loop
операторы управления, особенно без определенного контура заявления условия, как:
while (1==1) {
...
}
Чтобы избежать зацикливания, нужно будет объединить филиалы и петли заявления, возможно, это была идея вашего вопрос:
while (1==1) {
// do stuff
...
// special condition
if ($cancel) {
break;
}
}
Вы искали ** продолжение; **? – donald123
Гнездо другое 'if'? – Sonny
Я не уверен, что вы просите. Вы хотите, чтобы выполнение переключилось на начало блока 'else'? Вы всегда можете использовать '' goto' '(http://php.net/manual/en/control-structures.goto.php) (и обратите внимание, что 'break' и' continue' являются только специализированными формами 'goto'), но в 99% случаев, есть лучший способ. –