나는이 모든 것 (그리고 심지어 die()
또는 die(0)
)이 동일 하다고 믿습니다 . 동일하지 않은 경우 스크립트를 성공적으로 종료하기 위해 선호하는 것은 무엇입니까? 동일한 경우 성공적인 스크립트 완료를 나타내는 기본 표준이 있습니까? 나는 사용하는 경향이 있습니다 exit;
.
편집 : 모든 대답은 ” die()
그리고 exit()
동일”하지만 내 질문에 그렇게 말합니다. 나는 이것이 내 질문이 아님을 분명히하기 위해 제목을 업데이트했습니다. 명령 줄 스크립트에서 성공을 명확하게 표시하고 싶습니다.
답변
이것들은 모두 동일합니다. 나는에 die()
대한 직접적인 별칭이라고 확신 exit()
하지만 그렇지 않더라도 여전히 동일하게 작동합니다.
이러한 함수 중 하나에 문자열 인수가 주어지면 프로세스를 종료하기 전에 문자열을 인쇄합니다. 255 미만의 정수를 발견하면 해당 정수는 프로세스의 리턴 코드로 간주되어 PHP 스크립트를 호출 한 프로세스로 다시 전달됩니다. 이것은 명령 줄 응용 프로그램을 작성할 때 특히 유용합니다 (PHP는 웹 전용이 아닙니다!).
지금까지의 차이로 exit
, exit()
그리고 exit(0)
, 정말 아무도 없다. exit
기술적으로는 함수가 아니라 언어 구조 이기 때문에 처음 두 개 사이에는 확실히 차이가 없습니다. 따라서 괄호를 사용하거나 사용하지 않고 호출 할 수 있습니다 echo
. 코드를 반환하는 것은 0
“이 프로그램이 오류없이 성공적으로 실행되었습니다” 를 의미하며 인수를 전달하지 않으면 정확히 어떤 일이 발생하는지 모르겠지만 PHP.net 에서는 인수가없는 exit
경우 성공을 의미하므로 내기 할 것입니다. 0
다시 PHP.net 은 인수에 대한 기본값을 표시하지 않지만을 반환합니다 .
답변
여러 사람이 언급했듯이 die ()와 exit ()는 정확히 동일합니다.
PHP 문서 를 보면 인수에 대한 두 가지 옵션이 있습니다.
-
숫자 값. 이것은 웹 서버가 아닌 명령 줄에서 PHP를 사용하는 경우에만 유용합니다. 0 값은 성공을 나타냅니다. 0이 아님은 실패 조건이 발생했음을 나타냅니다.
-
문자열 값. 종료가 발생하면 브라우저에 표시됩니다.
die () 또는 exit () 대신 예외 및 사용자 지정 최상위 예외 처리기 를 사용하여 실패 조건을 관리 하는 것이 좋습니다 .
자동 오류 로깅과 같은 작업을 수행하는 더 많은 유연성이 있습니다. 또한 PHP를 사용하여 JSON API를 구현하는 경우이 예외 처리기는 대신 유효한 오류를 나타내는 JSON 스 니펫을 전달할 수 있습니다.
답변
더 나은 의미론과 관련 die($arg);
하여 비정상적이거나 예기치 않은 종료를 위해 사용되어야 한다고 말할 수 있습니다. 물론 당신이 여전히 그것을 잡았을 때도 말입니다. 그리고 a 또는 또는 a exit($arg);
와 같이 프로세스의 정상적인 (예상 / 제어) 종료에 사용해야합니다 .break;
for
while
switch
구조이지만 최종 끝.
그럼에도 불구하고 .. 저는 개인적으로 장군을 자주 사용합니다 if { } else { }
구조를 거대한 프로세스의 다른 분기를 제어하거나 출력 버퍼링을 사용하므로 “종료”를 사용할 필요가 없습니다.
나는 또한 사용 die($arg)
과 같은 간단한 오류 포착 의미 체계에서 사용합니다.
$db = mysql_connect([$args]) or die ($error);
…
답변
die();
의 동의어입니다. exit();
이며 기능적으로 동일합니다.
표준 방법은 성공을 나타 내기 위해 종료 코드 0을 사용하고 오류 조건을 나타 내기 위해 다른 모든 것을 사용하는 것입니다.
답변
die ()는 일반적으로 오류 출력으로 스크립트를 종료하는 데 사용됩니다.
die("There was a fatal error");
where-as exit는 일반적으로 성공적인 종료로 사용됩니다 (적어도 내 코딩에서는)
PHP 매뉴얼 기능이 동일하다는 것을 말한다.
답변
나는 지옥에 낙심 할 것이지만, 어떤 경우에는 CLI에서 해킹 할 때 프로그램이 죽는 것을 원하지 않고 전체 실행을 계속하고 싶지는 않습니다.
여기서 목표는 별도의 핸드 포인트 파일에 대한 API 호출을 피하는 것입니다. 인터페이스에 시스템 호출을 실행하는 멋진 재생 버튼이 있다고 가정 해 보겠습니다.
예 1 : 프로그램이 작업 후 종료되고 데이터가 반환되지 않습니다. 이것은 원하지 않습니다.
if ($_GET["play"] != ""){
// Some job
exit;
}
/* Huge amount of data*/
예제 2 : 프로그램은 여전히 실행 되어 GET 요청에 전체 데이터를 제공합니다. 이 경우에는 불필요합니다. 이것은 그가 이미 가지고있는 모든 데이터로 브라우저 속도를 늦추고 있습니다.
if ($_GET["play"] != ""){
// Some job
}
/* Huge amount of data*/
예 3 : 프로그램이 계속 실행 되고 예상대로 데이터가 반환되지 않고 play 명령이 실행되었지만 전체 데이터 세트가 구문 분석되고 이는 불필요한 작업이며 php / the 시스템을 느리게 할 수 있습니다.
/* Huge amount of data*/
if ($_GET["play"] != ""){
// Some job
}
예제 4 : 프로그램은 여전히 실행되고 , 예상대로 데이터가 반환되지 않았고, play 명령이 실행되었으며, 전체 데이터가 구문 분석되지 않았으며, php는 예상대로 빈 응답으로 200OK를 매우 빠르게 반환했습니다. 모두 행복합니다!
if ($_GET["play"] != ""){
// Some job
goto END;
}
/* Huge amount of data*/
END;
예! GOTO를 사용하면 때때로-할 수있는 최선의 방법으로 간주됩니다 ?-!
답변
die
과 정확히 동일합니다 exit
.
설명서에서 :
상태가 정수이면 해당 값이 종료 상태로 사용됩니다.
이것은 종료 상태에 따라 무언가를 수행하는 일종의 래퍼가있는 경우에만 유용합니다. 외부 세계에 종료 코드를보고해야하는 특별한 필요가없는 한 exit;
.