IT

PHP에서 문을 어기는 방법은 무엇입니까?

lottoking 2020. 7. 18. 09:41
반응형

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";하거나 더 이상 실행에 필요하지 않은 코드를 추가로 조건이있는 경우에 있습니다.


다른 사용자의 의견에 대해 걱정하지 않습니다. 제거 할 수 있습니다. 이 "공상"을 개발할 때 가끔 필요합니다 . 우리가 있다면 많은 필요하지 코드가 훨씬 깨끗하고 심미적입니다.

이 샘플 코드는 설명 추한 중첩 된 IFS를 많이보다 훨씬 더 적합하게 할 수있는 것입니다. 그 CERTAINS 상황을 특정 상황이 발생하는 것을 의미하지 않습니다 .

못생긴 코드

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);

@NiematojakTomasz가 말했듯이, 사용은 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();
}

일부 의견을 읽은 후 예외 처리가 항상 자동화 흐름 제어에 적합하지 않다는 것을 깨달았습니다. 냉각 제어 흐름의 경우 "다른 경우"를 사용하는 것이 좋습니다.

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가 외교부 / 루프 동안, 우리가 "하자 한 라운드를". A를 잠시 (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 Area1;
   .....
   .....


}



Area1:
....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($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 만 적용됩니다.


아니.

그러나 어떻습니까?

$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

그것이 달성 가능한지 아닌지 당신의 질문에 대답하면, php의 "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 문을 중단하고 echo "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";

이 코드를 사용하면 원본 문장이 완전히 존중됩니다 .. :) 더 읽기 쉽습니다!


예를 들어 'die'문을 사용할 수 있습니다.

<?php
if (condition)
{
statements;
die;
}
?>

이 경우 원하는 작업이 논리적으로 의미가 없습니다.


간단한 해결책은 주석 처리하는 것입니다.

$a="test";
if("test"==$a)
{

  //echo "yes"; //no longer needed - 7/7/2014 - updateded bla bla to do foo
}

추가 된 이점은 원래 코드를 변경하지 않고 날짜를 지정하고 이니셜을 붙이고 이유를 입력 할 수 있다는 것입니다.

OP 요청에 따르면 왜 반대 투표가 완벽하게 유효한 해결책이라고 생각합니다.

"[위의 if 문을 중단하고] echo"yes "실행을 중지하고 싶습니다. 또는 더 이상 실행할 필요가없는 이러한 코드는 추가 조건이있을 수도 있고 없을 수도 있습니다.이를 수행 할 방법이 있습니까?"

사실 누군가는 다른 솔루션 중 일부를 살펴보고 1 년 후 무슨 일이 일어나고 있는지 궁금해 할 수 있습니다. 내 제안에 따라 향후 참조를 위해 좋은 문서를 남길 수 있으며 이는 항상 좋은 습관입니다.


나머지 스크립트 실행을 완전히 중지하려면 다음을 수행하십시오.

출구; // 휴식 대신. 나머지 코드는 실행되지 않습니다.


나는 파티에 늦었지만 기여하고 싶었다. 아무도 제안하지 않은 것에 놀랐습니다 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.

함께 사용 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!

삼항 연산자를 사용하는 것은 어떻습니까?

<?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'];
 }
?>

$a="test";
if("test"!=$a)
{
echo "yes";                   
}
 else
 {
  echo "finish";
}

참고 URL : https://stackoverflow.com/questions/7468836/any-way-to-break-if-statement-in-php

반응형