PHP에서 if 문을 깨는 방법은 없나요?
PHP 실행을 가 PHP에 ?if「」와 「」break ★★★★★★★★★★★★★★★★★」break(1)★★★★★★에switch/loop를 들어.예를들면
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
는 PHP를 사용하지 .echo "test";그리고 에 갈 것이다.echo "finish";
만약을 위해 이것이 필요하다.
$a="test";
if("test"==$a)
{
break;
echo "yes"; // I don't want this line or lines after to be executed, without using another if
}
echo "finish";
는 ★★★★ 싶다.breakif합니다.echo "yes";또는 더 이상 실행할 필요가 없는 코드가 추가 조건이 있을 수도 있고 없을 수도 있습니다.이법 사용 용용 용? ???
업데이트: 이 질문을 올린 지 불과 2년 만에 저는 성장했고, 코드를 작은 덩어리로 쓰는 방법, 코드 냄새일 수 있다면 왜 중첩되는지, 그리고 관리하기 쉽고 작은 함수를 작성함으로써 애초에 이러한 문제를 피하는 방법을 배웠습니다.
때때로 이러한 "화려한" 것을 개발할 때 필요한 것이 있습니다.만약 우리가 그것을 깨트릴 수 있다면if 네스트, "" " " " "if는 불필요하므로 코드가 훨씬 깨끗하고 심미적입니다.
샘플 는, 에서, 가 Breaked 것을 있습니다.if 둥지보다 더 할 수 있다ifs.
못생긴 코드
if(process_x()) {
/* do a lot of other things */
if(process_y()) {
/* do a lot of other things */
if(process_z()) {
/* do a lot of other things */
/* SUCCESS */
}
else {
clean_all_processes();
}
}
else {
clean_all_processes();
}
}
else {
clean_all_processes();
}
잘생긴 코드
do {
if( !process_x() )
{ clean_all_processes(); break; }
/* do a lot of other things */
if( !process_y() )
{ clean_all_processes(); break; }
/* do a lot of other things */
if( !process_z() )
{ clean_all_processes(); break; }
/* do a lot of other things */
/* SUCCESS */
} while (0);
를 토마스의 용법이다.goto대체 수단입니다.단점은 항상 라벨(포인트 타깃)을 정의해야 한다는 것입니다.
이치노 하다, , 하다, 하다, 이 경우 기능 할 수 .return언제든지.
적절한 방법:
try{
if( !process_x() ){
throw new Exception('process_x failed');
}
/* do a lot of other things */
if( !process_y() ){
throw new Exception('process_y failed');
}
/* do a lot of other things */
if( !process_z() ){
throw new Exception('process_z failed');
}
/* do a lot of other things */
/* SUCCESS */
}catch(Exception $ex){
clean_all_processes();
}
코멘트를 몇 개 읽고 나서, 통상의 플로우 제어에 예외 처리가 항상 이치에 맞는 것은 아니라는 것을 깨달았습니다.정상적인 제어 흐름의 경우 "If else"를 사용하는 것이 좋습니다.
try{
if( process_x() && process_y() && process_z() ) {
// all processes successful
// do something
} else {
//one of the processes failed
clean_all_processes();
}
}catch(Exception ex){
// one of the processes raised an exception
clean_all_processes();
}
또한 프로세스 반환 값을 변수에 저장한 다음 실패한 프로세스/예외 블록을 확인할 수 있습니다.
do/while 루프에서 벗어날 수 있으므로 한 바퀴만 "실행"하도록 하겠습니다.마지막에 shile(false)이 있으면 이 상태는 결코 true가 되지 않으며 다시 반복되지 않습니다.
do
{
$subjectText = trim(filter_input(INPUT_POST, 'subject'));
if(!$subjectText)
{
$smallInfo = 'Please give a subject.';
break;
}
$messageText = trim(filter_input(INPUT_POST, 'message'));
if(!$messageText)
{
$smallInfo = 'Please supply a message.';
break;
}
} while(false);
goto 연산자를 사용하여 프로그램의 다른 섹션으로 이동할 수 있습니다.타겟 포인트는 라벨 뒤에 콜론을 붙이고, 지시는 goto 뒤에 원하는 타겟라벨로 지정됩니다.이것은 완전히 제한되지 않은 것은 아니다.대상 라벨은 동일한 파일 및 컨텍스트 내에 있어야 합니다.즉, 함수 또는 메서드에서 점프할 수도 없고 점프할 수도 없습니다.루프나 스위치 구조에 뛰어들 수도 없습니다.여기서 뛰어내릴 수도 있고, 일반적인 용도는 다단계 브레이크 대신 goto를 사용하는 것입니다.
명령어는 다음과 같습니다.
if(smth) {
.....
.....
.....
.....
.....
goto My123;
.....
.....
}
My123:
....your code here....
goto는 코드가 불량하다는 표시이므로 실제 스크립트에서는 사용해서는 안 됩니다.
do-while(false)을 사용할 수 있습니다.
<?php
do if ($foo)
{
// Do something first...
// Shall we continue with this block, or exit now?
if ($abort_if_block) break;
// Continue doing something...
} while (false);
?>
http://php.net/manual/en/control-structures.if.php#90073 에서 설명하고 있는 바와 같이
아니요, 루프 안에서처럼 if 블록을 "브레이크"하는 방법은 없습니다.:(
그래서 당신의 테스트를switch!
(테스트 케이스가 많지는 않아도) switch 스테이트먼트를 사용하도록 권장하지 않은 이유는 무엇입니까?
당신은 그것이 너무 장황하다고 생각하나요?
여기서 꼭 하고 싶어요.
switch($a){
case 'test':
# do stuff here ...
if(/* Reason why you may break */){
break; # this will prevent executing "echo 'yes';" statement
}
echo 'yes'; # ...
break; # As one may already know, we might always have to break at the end of case to prevent executing following cases instructions.
# default:
# something else here ..
# break;
}
예외는 오류를 발생시키기 위한 것이지 실제로 실행 결함을 제어하기 위한 것은 아닙니다.
치 않은 것이 경우 처리는 여기서 .:/.
$a = 1;
switch($a) {
case "1":
if ($condition1){
break;
}
if ($condition2){
break;
}
if ($condition3){
break;
}
}
이렇게 해서 나는 내가 원하는 것을 얻었다.스위치는 케이스가 확실한 것만을 사용하고, 컨디션의 선택에는 브레이크만을 사용합니다.break: condition1과 condition2를 사용하는 이유는 모두 충족될 수 있습니다.이 상황에서는 condition1만 적용됩니다.IF는 순서에 따라 선택됩니다.
아니요.
하지만 다음 사항은 어떻습니까?
$a="test";
if("test"==$a)
{
if ($someOtherCondition)
{
echo "yes";
}
}
echo "finish";
는 안 되는 옮겨주세요.else/elseif분점.네가 하려는 일을 왜 하려고 하는지 잘 모르겠어.
'아니다'라는 말은 '아니다'라는 말에서 수 있는 이 없습니다.if하지 않은 (「완전 정지」를 사용)exit)의수 에 다른 방법은 수 if플러그인에 코드를 삽입하고 있기 때문에 다음과 같이 기술합니다.
if ( condition ) {
// Code and variables I want to use
// Code I have control over
// Code I don't want to run
}
// More code I want to use
저도 같은 문제가 있었어요.해결책은 만약을 쌓는 것이다.첫 번째 예는 단순하지만...
$a="test";
if("test"==$a)
{
do something
//break; We remove from your example
if(comparison) {
echo "yes";
}
}
echo "finish";
아니면 goto를 사용하셔도 됩니다.
$a="test";
if("test"==$a)
{
do something
goto the_end_of_your_func;
echo "yes";
}
the_end_of_your_func:
echo "finish";
php의 "goto" 연산자를 사용하여 달성할 수 있는지 여부를 묻는 질문에 답변합니다.
그러나 윤리적으로 goto를 사용하는 것은 좋지 않으며 goto를 사용할 필요가 있기 때문에 goto의 요건을 제거할 수 있도록 코드를 재구성할 필요가 있습니다.
상기의 샘플 코드에 의하면, 코드를 재구축 할 수 있어 필요 없게 된 코드를 삭제하거나 코멘트를 붙일 수 있는 것을 명확하게 알 수 있습니다(향후 사용할 가능성이 있는 경우).
$arr=array('test','go for it');
$a='test';
foreach($arr as $val){
$output = 'test';
if($val === $a) $output = "";
echo $output;
}
echo "finish";
당신의 진술을 종합하면, 나는 이것이 당신에게 당신의 소원의 결과를 줄 것이라고 생각합니다. 너무 많은 진술을 하지 않고, 깨끗하고 단순합니다.
못생기고 잘생긴 코드에 대해 제가 추천하는 것은 다음과 같습니다.
function myfunction(){
if( !process_x() || !process_y() || !process_z()) {
clean_all_processes();
return;
}
/*do all the stuff you need to do*/
}
정상적인 코드 어딘가에
myfunction();
나는 많은 변화 없이 간단한 해결책을 가지고 있다.첫 번째 진술은
위의 if 문을 부수고 에코 "yes"의 실행을 중지하고 싶습니다.또는 실행할 필요가 없어지고 추가 조건이 있을 수도 있고 없을 수도 있습니다.이 방법은 없을까요?
간단해 보여요이렇게 코드를 시도합니다.
$a="test";
if("test"==$a)
{
if (1==0){
echo "yes"; // this line while never be executed.
// and can be reexecuted simply by changing if (1==0) to if (1==1)
}
}
echo "finish";
이 코드 없이 시도하고 싶다면 간단해. 그리고 원할 때 다시 올 수 있어.또 다른 해결책은 댓글 차단입니다.또는 단순히 생각하고 다른 구분된 코드를 사용하여 최종 코드에 결과만 복사 붙여넣기 할 수도 있습니다.그리고 당신의 경우, 코드가 더 이상 불필요한 것이 아니라면, 결과는
$a="test";
echo "finish";
이 코드로 원래 진술은 완전히 존중됩니다:) 가독성 향상!
간단한 해결책은 그것을 논평하는 것이다.
$a="test";
if("test"==$a)
{
//echo "yes"; //no longer needed - 7/7/2014 - updateded bla bla to do foo
}
또한 원래 코드를 변경하지 않고 날짜를 지정하여 초기화하고 이유를 입력할 수 있다는 장점이 있습니다.
왜 다운투표가 되었는지, 작전요청에 따르면, 나는 이것이 완벽하게 유효한 해결책이라고 생각한다.
위의 if 문을 깨고 에코 "yes"의 실행을 중지하고 싶습니다.또는 더 이상 실행할 필요가 없는 코드, 추가 조건이 있을 수도 있고 없을 수도 있습니다.이 방법을 사용할 수 있습니까?
실제로 1년 뒤 다른 해결책을 보고 무슨 일이 벌어지고 있는지 궁금해할 수도 있습니다.제 제안대로, 향후 참조를 위해 좋은 문서를 남길 수 있습니다.이것은 항상 좋은 관행입니다.
3진 연산자를 사용하는 것은 어떻습니까?
<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
?>
다음 if/else 문과 동일한 것은 무엇입니까?
<?php
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
나머지 스크립트의 실행을 완전히 중지하려면 다음 작업을 수행합니다.
exit; //브레이크 대신.나머지 코드는 실행되지 않습니다.
나는 파티에 늦었지만 기부하고 싶었다.아무도 제안하지 않았다니 놀랍다.exit()테스트에 도움이 됩니다.나는 그것을 항상 사용하고 있고 매력적으로 작용한다.
$a ='';
$b ='';
if($a == $b){
echo 'Clark Kent is Superman';
exit();
echo 'Clark Kent was never Superman';
}
코드는 에서 정지합니다.exit()그 이후의 모든 것은 실행되지 않습니다.
결과
Clark Kent is Superman
와 함께 동작합니다.foreach() ★★★★★★★★★★★★★★★★★」while()가 있어요.정말 어디에 두든 작동한다.
foreach($arr as $val)
{
exit();
echo "test";
}
echo "finish";
결과
nothing gets printed here.
와 a와 하세요.forloop()
for ($x = 2; $x < 12; $x++) {
echo "Gru has $x minions <br>";
if($x == 4){
exit();
}
}
결과
Gru has 2 minions
Gru has 3 minions
Gru has 4 minions
통상의 경우
$a ='Make hot chocolate great again!';
echo $a;
exit();
$b = 'I eat chocolate and make Charlie at the Factory pay for it.';
결과
Make hot chocolate great again!
$a="test";
if("test"!=$a)
{
echo "yes";
}
else
{
echo "finish";
}
언급URL : https://stackoverflow.com/questions/7468836/any-way-to-break-if-statement-in-php
'programing' 카테고리의 다른 글
| @SmallTest, @Medium의 목적은 무엇입니까?Android에서 테스트 및 @LargeTest 주석을 사용하시겠습니까? (0) | 2023.02.03 |
|---|---|
| 가비지 컬렉션이 문제가 될 경우 Spring Batch가 프로그램이 9400만 건의 트랜잭션을 중지하는 것을 막을 수 있습니까? (0) | 2023.02.03 |
| MySQL: 페이지란? (0) | 2023.02.03 |
| js 또는 jQuery를 사용하여 Ajax 요청에 커스텀 HTTP 헤더를 추가하려면 어떻게 해야 합니까? (0) | 2023.02.03 |
| 모키토:개인 필드 초기화 모의 (0) | 2023.01.24 |