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";
위 break
의 if
행사를 원하고 실행 을 중지 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
'IT' 카테고리의 다른 글
Swift에서 단색으로 UIImage 생성 (0) | 2020.07.18 |
---|---|
MySQL 테이블이 충돌로 표시되고 마지막 (자동?) 복구 실패 (0) | 2020.07.18 |
소스 이미지가없는 경우 대체 이미지를 표시하는 방법은 무엇입니까? (0) | 2020.07.18 |
숫자가 짝수인지 홀수인지 확인 (0) | 2020.07.18 |
scanf를 사용하여 공백을 어떻게 입력 할 수 있습니까? (0) | 2020.07.18 |