[php] exit, exit (), exit (0), die (), die (0)-스크립트 종료 방법

나는이 모든 것 (그리고 심지어 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;forwhileswitch 구조이지만 최종 끝.

그럼에도 불구하고 .. 저는 개인적으로 장군을 자주 사용합니다 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를 사용하면 때때로-할 수있는 최선의 방법으로 간주됩니다 ?-!

https://www.php.net/manual/en/control-structures.goto.php

https://i.stack.imgur.com/kQnqC.png


답변

die과 정확히 동일합니다 exit.

설명서에서 :

상태가 정수이면 해당 값이 종료 상태로 사용됩니다.

이것은 종료 상태에 따라 무언가를 수행하는 일종의 래퍼가있는 경우에만 유용합니다. 외부 세계에 종료 코드를보고해야하는 특별한 필요가없는 한 exit;.