PHP에서 die ()와 exit ()의 차이점은 무엇입니까?


679

PHP에서 die()exit()기능 의 차이점은 무엇입니까 ?

둘 다 동일한 기능을 가지고 있다고 생각하지만 둘 다에 다른 것이 있는지 의심합니다 ... 무엇입니까?


2
exit ()는 숫자 종료 상태로 프로그램을 종료하는 반면, die ()는 오류 메시지를 stderr에 인쇄하고 EXIT_FAILURE 상태로 종료합니다. so exit() is exit and die() is also exit :)
Muhammad Shahzad

답변:


541

차이점은 없습니다. 동일합니다.

PHP 매뉴얼 exit:

참고 :이 언어 구문은와 동일합니다 die().

PHP 매뉴얼 die:

이 언어 구성은와 동일합니다 exit().


17
별칭을 사용하면 프로그래머가 편한 것을 사용할 수 있습니다. 나는 죽는 것보다 더 나은 출구를 기억합니다. 어떤 사람들은 출구보다 죽는 것을 더 잘 기억합니다.
mauris

28
이것 ( php.net/manual/en/aliases.php )은 왜 두 함수가 같은 일을하는지에 대한 설명을 줄 것입니다.
Marek Karbarz

86
그들이 같은 일을하더라도, 나는 일반적으로 die오류 관련 중지 및 exit다른 모든 시나리오를 예약 합니다 . 코드를 읽을 때 더 잘 흐르는 것 같습니다.
nextgentech

7
이것을 되살려 서 미안하지만 적어도 나에게는 ... die쓰기보다 훨씬 빠릅니다 exit... exitPHP가 아닌 프로그래머에게는 더 읽기 쉽기 때문에 사용 하기 시작 했지만 die입력 할 때 더 빠릅니다. 서둘러. 또한 입력하는 방식에 따라 쓰기 위해 손 위치를 변경할 필요가 없습니다 die.
Alejandro Iván

7
@mauris, 하나의 함수가 하나의 이름을 갖는 것이 더 좋습니다 . 모든 PHP 함수를 상상하면 될 두 개의 이름이 완전 엉망 .
Pacerier 2016 년

221

오리진의 차이점

PHP die()exit()PHP 의 차이점 은 그 기원 입니다.


기능적으로 동등한

die()하고 exit()있는 동일한 기능.

PHP 매뉴얼

PHP 매뉴얼 die:

이 언어 구성은와 동일합니다 exit().

PHP 매뉴얼 exit:

참고 :이 언어 구문은와 동일합니다 die().

함수 별칭 목록에 대한 PHP 매뉴얼 :

die 마스터 함수의 별명입니다. exit()


다른 언어의 다른

die()하고 exit()있는 다른 언어로 다른 하지만 PHP에서 그들은 동일합니다.

에서 또 다른 PHP의 호언 장담 :

... C 및 Perl 코더로서, "왜 exit ()는 숫자 종료 상태로 프로그램을 구제하고 die ()는 오류 메시지를 stderr에 출력하고 EXIT_FAILURE 상태로 종료합니다. " 그러나 나는 우리가 PHP의 지저분한 구문 세계에 있다는 것을 기억했습니다.

PHP에서 exit ()와 die ()는 동일합니다.

디자이너들은 분명히 "흠, C에서 exit ()를 빌려 보자 . 그리고 Perl 사람들은 아마도 Perl에서와 같이 die ()를 가져 가면 아마 그것을 좋아할 것이다 . 죄송합니다! 우리는 두 개의 exit 함수를 가지고 있습니다! "문자열 또는 정수를 인수로 사용하여 동일하게 만들 수 있습니다!"

결과적으로 이것이 실제로 "더 쉬워 진"것이 아니라 더 혼란스러워 졌다는 것입니다. C 및 Perl 코더는 exit ()를 계속 사용하여 정수 종료 값만 던지고 die ()는 오류 메시지를 던지고 실패와 함께 종료합니다. 초보자와 제 1 언어로 PHP를 사용하는 사람들은 아마도 "음, 두 개의 종료 함수 중 어느 것을 사용해야합니까?" 매뉴얼에는 왜 exit () 및 die ()가 있는지 설명하지 않습니다.

일반적으로 PHP에는 이와 같이 이상한 중복이 많이 있습니다. 다른 언어 배경을 가진 사람들에게는 친절하지만, 그렇게하는 동안 혼란스러운 중복을 만듭니다.


14
이것이 100 번째 답에 관한 것이지만 (내 대답 ^^에서 볼 수 있듯이) 동등한 것으로, 실제로 이것은 아주 좋은 점을 추가합니다. 무엇보다도 다른 언어에서는 동일하지 않습니다 (처음에는 혼란). (+1)
레위

@Levit, 아니요, 아니요, 완전히 잘못되었습니다 . 아무도 이름을 소유하지 않으며 다른 언어는 동일한 이름을 동일한 방식으로 재사용합니다. 우리는 또 다른 표준 작업 방식이 필요하지 않기 때문에 괜찮습니다 . "처음에 혼란"은 PHP가 두 개의 다른 이름 을 하나의 함수에 할당하기 때문입니다 .
Pacerier

2
@Pacerier : 물론, "누가 누구의 잘못인가"의 관점에서 보면, 그것은 옳습니다. 그럼에도 불구하고 그들은 단순히 여러 언어로 다른 것을 의미한다는 사실입니다 (괜찮습니다). 중립적 인 관점에서 보면, 그것은 분명히 사실을 유지합니다 : 서로 다른 의미 때문에 혼란이 있습니다 (두 개의 동일한 함수 별칭을 생성하는 데 PHP의 결함이 있더라도). 나는 당신이 내 의견에서 이해 한 것이라면 그 언어들 중 어느 하나를 손가락으로 가리키고 싶지 않았습니다 ... (great xkcd btw (Y) ^^)
Levite

2
이것은 분명히 선택된 답변, 좋은 설명이어야합니다!
코디 브라운

exit()연결을 닫지 않은 다른 사용자가 응답 한 die()것으로 보입니다.
ner0

62

앞에서 언급했듯이이 두 명령은 동일한 파서 토큰을 생성합니다.

그러나

작은 차이가 있으며 이는 파서가 토큰을 반환하는 데 걸리는 시간입니다.

PHP 파서를 연구하지는 않았지만 "d"로 시작하는 긴 함수 목록이고 "e"로 시작하는 짧은 목록 인 경우 " 이자형". 전체 기능 이름을 확인하는 방법에 따라 다른 차이점이있을 수 있습니다.

PHP 구문 분석 전용 "완벽한"환경과 다른 매개 변수를 가진 많은 요청이 없다면 측정 할 수 없을 것입니다. 그러나 PHP는 통역 된 언어입니다.


4
@Timeless, Perfectionists는 "PHP는 통역 된 언어입니다"라고 말하지 않을 것입니다. PHP는 서버 설정에 따라 해석되거나 컴파일 될 수있는 언어입니다.
Pacerier

29
그리고 ... "die"는 "exit"에 대해 3 대 길이의 3 자입니다. 따라서 메모리와 파일 공간이 25 % 줄어 듭니다! ;)
Jan Derk

2
' "d"로 시작하는 긴 함수 목록이고 "e"로 시작하는 짧은 목록 인 경우 "e"'로 시작하는 함수의 함수 이름을 찾는 데 시간이 걸리는 경우가 있습니다. d로 시작하는 함수를 찾을 때 시간 벌칙이 발생한다는 것을 의미합니다 . 일반적으로 목록이 클수록 항목을 찾는 시간이 길어집니다.
Pere

9
당신이 쓴 것처럼, 당신은 PHP 파서를 연구하지 않았습니다. PHP가 어떻게 구현되는지에 대한 당신의 꿈을 기반으로 한 쓸모없는 답변에 감사드립니다.
고인돌

44

다이의 PHP 매뉴얼 :

die — 종료와 동일

Parens의 유무에 관계없이 die;동일한 방식으로 수행 할 수도 있습니다 exit;.

선택의 유일한 이점 die()이상은 exit(), 당신이 여분의 문자를 입력에 여분의 시간이 될 수 있습니다 ;-)


1
사람이 다른 언어에서 왔을 때 그것은 또한 편리 성을, 그들이하는 방식 중 하나에 어느 정도 익숙으로 얻을 수 있었다
로한 Khude

참고 (대화식으로 PHP를 실행하는 경우 php -a) die;, die();, exit;exit();동안 효과가 없습니다 exit(세미콜론없이)는 대화 형 모드를 종료합니다.
산티아고 아 리치 티

31

다른 모든 정답으로 말한다, die그리고 exit동일 / 별칭이다.

스크립트가 예상되고 원할 때 스크립트 실행을 끝내고 싶을 때는 개인 협약이 있지만을 사용 exit;합니다. 그리고 일부 문제로 인해 실행을 종료해야 할 때 (db에 연결할 수 없거나 파일에 쓸 수 없음 등) die("Something went wrong.");스크립트를 "킬"하는 데 사용합니다.

exit를 사용할 때 :

header( "Location: http://www.example.com/" ); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit; // I would like to end now.

내가 죽을 때 :

$data = file_get_contents( "file.txt" );
if( $data === false ) {
    die( "Failure." ); // I don't want to end, but I can't continue. Die, script! Die!
}
do_something_important( $data );

이렇게하면 exit코드의 특정 지점에서 볼 때이 시점에서 논리가 여기서 끝나기 때문에 종료하고 싶다는 것을 알고 있습니다. 내가 볼 때 die실행을 계속하고 싶다는 것을 알고 있지만 이전 실행의 오류로 인해 할 수 없거나해서는 안됩니다.

물론 이것은 프로젝트에서만 작업 할 때만 작동합니다. 더 많은 사람들이있을 때 아무도 그들을 사용 하지 못하게 die하거나 exit내 관습에 맞지 않는 곳에서는 ...


30

여기 흥미로운 것이 있습니다. 비록 exit()die()동등한, die() 폐쇄 연결. 연결을 exit() 닫지 않습니다 .

die():

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

exit():

<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

결과 :

exit():

HTTP/1.1 304 Not Modified 
Connection: Keep-Alive 
Keep-Alive: timeout=5, max=100

die():

HTTP/1.1 304 Not Modified 
Connection: close

프로젝트를 위해 이것을 고려해야 할 경우를 대비하여.

크레딧 : https://stackoverflow.com/a/20932511/4357238


1
이것은 정답입니다.
ner0

2
그냥하고 테스트 exit하고 die그들은 모두 밀접한 관계, 같은 방식으로 작동합니다.
Grzegorz Adam Kowalski

12

기능 측면에서는 동일하지만 다음 시나리오에서 코드를 읽을 수 있도록 사용합니다.

오류가 발생하여 실행을 중지해야 할 경우 die ()를 사용하십시오.

예 : die( 'Oops! Something went wrong' );

오류가없고 실행을 중지해야 할 경우 exit ()를 사용하십시오.

예 : exit( 'Request has been processed successfully!' );


11

이 페이지 말한다는 die의 Alies 보낸 사람이다 exit그들은 동일하므로. 또한 다음과 같이 설명합니다.

API 정리 또는 다른 이유로 인해 이름을 변경 한 함수가 있으며 이전 이름은 이전 버전과의 호환성을 위해 별칭으로 만 유지됩니다. 이러한 종류의 별칭은 더 이상 사용되지 않거나 이름이 변경되어 이식 할 수없는 스크립트로 이어질 수 있으므로 일반적으로 좋지 않습니다.

그래서, 편집증이라고 불러라. 그러나 die앞으로는 아무것도 없을 것이다 .


3
또한 말한다 가 더 선호하는 이름이 여러 사람 중 하나입니다 없으며, 어떤 경우 is_int()is_integer()예를 들어 똑같이 좋다. php-srcGitHub 의 커밋 히스토리를 살펴보면 die()구문은 SVN 저장소로 변환 된 1999 년 이후로 언어가 존재하는 한 PHP로 구성되었습니다. 더 이상 사용되지 않을 것이라고 생각하는 것은 터무니없는 것 같습니다.
Mark Amery 21

2
그의 소재지를 자신의 결론으로 이어질하지 않지만 @MarkAmery이, 결론 자체는 유효합니다 ~ "나, 편집증 전화 없지만 더있을 수 있습니다 exit. 미래에 또는 더있을 수 있습니다 die미래"
Pacerier

@Pacerier 아주 그렇습니다. 미래에는 PHP가 없을 수 있으므로이 프로그래밍 공연을 그만두고 사업자 또는 세금 징수 원이되자. 결국 죽음과 세금 외에는 확실한 것이 없습니다.
Mark Amery

@MarkAmery, "미래에 PHP가 없다" 는 평균 이상의 편집증 인 것 같습니다. 역사는 미친 듯이 인기있는 언어가 그렇게 쉽게 죽지 않는 것으로 나타났습니다 (Fortran!).
Pacerier

1
편집증하지 마십시오. 출구 는 결코 죽지 않을 것이다 . :)
고인돌


6

기사 는 달리 제안 하지만 본질적으로 동일 합니다.


1
그 기사는 이상하다. 스캐너 정의 에서 동등한 것으로 알 수 있습니다. 차이가있는 경우 opcache없이 테스트를 실행했을 수 있습니다.
Ja͢ck

이 기사는 코드가 게시되지 않아 재현 할 수없는 벤치 마크에 관한 것입니다. 그냥 무시해
고인돌

0

기능적으로는 동일합니다. 따라서 어느 것을 사용할 것인지는 전적으로 개인 취향입니다. 의미 적으로 영어로는 다릅니다. 다이는 부정적인 소리. JSON 데이터를 클라이언트에 반환하고 프로그램을 종료하는 함수가있을 때이 함수 jsonDie ()를 호출하면 끔찍할 수 있으며 jsonExit ()를 호출하는 것이 더 적절합니다. 따라서 나는 항상 다이 대신 exit를 사용합니다.


OP는 PHP 종료 및 다이 기능에 대해서만 묻습니다.
Black Mamba

1
예, 그 질문에만 답했습니다. 그러나 기능의 차이점에 대한 질문은 아닙니다.
Luo Jiong Hui

내 가장 사랑스러운 기능 중 하나는 pd ()-Please Die를 의미합니다. 그래서 나는 그런 맥락에서 주사위가 나쁜 것이라고 확신하지 못한다 :)
Ivan Ponomarev

풀 스택 개발자 인 저는 저 자신을 프로그래머로 볼뿐만 아니라 사용자 경험 디자이너이기도합니다. 이런 맥락에서 동정심이 중요합니다. 동정심은 UI 디자인 방법뿐만 아니라 코딩 방법에도 영향을 미칩니다.
Luo Jiong Hui

0

나는이 질문 보면 내가 아는 바로는 여기

"PHP에서는 헤더 출력에 뚜렷한 차이가 있습니다. 아래 예에서는 다른 헤더를 사용하기로 선택했지만 중요하지 않은 exit ()와 die ()의 차이를 보여주기 위해" (개인적으로) 테스트


-3

w3schools 퀴즈 : die () 및 exit () 함수는 정확히 같은 기능을 수행합니까? 내 대답은 거짓이다. 정답입니다. 정답은 사실입니다.

스크린 샷은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오


-5

내가 스크립트에서 적어도 주목 한 것은 exit ()가 현재 실행중인 스크립트를 중지하고 호출하는 스크립트로 제어권을 다시 전달하는 반면 die는 트랙에서 php를 중지한다는 것입니다. 나는 그것이 큰 차이라고 말할 것입니까?


1
@AdarshMadrecha 이것은 사실이 아닙니다. 그들이 하위 함수 내부 또는 외부에 있으면 PHP 스크립트는 항상 중지됩니다.
MERT DOĞAN

-5

exit () 함수와 die () 함수의 결과는 항상 동일합니다. 그러나 별칭 매뉴얼 페이지 ( http://php.net/manual/en/aliases.php ) 에서 설명한 것처럼 die () 함수는 exit 함수를 호출합니다. 아래처럼 하드 코딩 된 것 같습니다.

function die($msg){
  exit($msg);
}

이는 소규모, 중규모 및 대규모 프로젝트의 성능 문제는 아니지만 프로젝트에 수십억 수십억 수십억 프로세스가있는 경우 매우 중요한 성능 최적화 상태가 발생합니다.

그러나 대부분의 사람들은 이것이 문제라고 생각하지 않습니다. 프로세스가 많으면 함수가 마스터 또는 별칭 인 경우보다 더 많은 문제를 생각해야하기 때문입니다.

그러나 정답은 바로 그 것입니다. 항상 마스터 기능이 별칭보다 빠릅니다.

드디어; Alias ​​매뉴얼 페이지에 따르면 더 이상 주사위를 사용할 수 없습니다. 별명 일 뿐이며 더 이상 사용되지 않습니다.

이러한 종류의 별칭은 더 이상 사용되지 않거나 이름이 변경되어 이식 할 수없는 스크립트로 이어질 수 있으므로 일반적으로 좋지 않습니다. 이 목록은 이전 스크립트를 새로운 구문으로 업그레이드하려는 사람들을 돕기 위해 제공됩니다.


2
앨리어싱은 '함수 호출'이 아닙니다. 가설을 정교화하기 전에 가정을 확인하십시오.
고인돌

@dolmen Aliases는 항상 하드 코드에서 주요 기능을 호출합니다. 이것이 일반적인 프로그래밍 규칙입니다.
MERT DOĞAN

@ MERTDOĞAN 별칭은 아무것도 호출하지 않습니다. 별명 (프로그래밍 또는 실제)은 객체의 다른 이름 일뿐입니다 (이미 이름이 있음). die()별도의 기능이 아닙니다. 의 다른 이름 일뿐입니다 exit(). 이 답변에는 별칭과 성능에 대한 잘못된 설명이 포함되어 있습니다.
axiac

docs.php.net/manual/en/… 위 예제와 같이 항상 별칭을 호출합니다. 무언가를 배우고 돌아 오십시오.
MERT DOĞAN

-10

그들은 거의 비슷하게 들리지만 exit ()를 사용하면 PHP 스크립트의 종료 코드를 설정할 수도 있습니다.

일반적으로 이것을 필요로하지는 않지만 콘솔 PHP 스크립트를 작성할 때 스크립트가 모든 것을 올바르게 완료했는지 확인하십시오 (예 : Bash).

그런 다음 exit ()를 사용하여 나중에 잡을 수 있습니다. 그러나 Die ()는이를 지원하지 않습니다.

Die ()는 항상 코드 0과 함께 존재합니다. 따라서 기본적으로 die () 명령은 다음을 수행합니다.

<?php
echo "I am going to die";
exit(0);
?>

다음과 같습니다.

<?php
die("I am going to die");
?>

42
그건 사실이 아니야. dieexit(그들은 같은 파서 토큰 (동일 제조 T_EXIT)와 같은 코드에 의해 실행된다). 매개 변수가 정수이면 해당 코드를 쉘로 리턴합니다. 그렇지 않은 경우, 출력을하고 0 그래서를 반환 die하고 exit그대로 각-다른 별칭이다.
ircmaxell

6
잘 알고 있다면 exit ( "I 'm exiting ...");
Yuda Prawira

4
23은 지금까지 단순히 틀린 대답으로 찬성했습니다. 그렇기 때문에 질문에 대한 모든 경쟁 답변을 읽고 모든 내용을 이해할 때까지 답변에 투표하지 않는 이유는 무엇입니까?
Mark Amery

3
이것이 바로 @GeoffreyHale이 그의 답변에서 쓴 것입니다. 답변으로 게시 한 것은 Perl 또는 C와 같은 언어에서 오는 것으로 예상되는 것입니다. 그러나 다른 사람들이 언급했듯이 PHP 에는 해당 되지 않습니다 . 이것을 반영하기 위해 답을 편집하거나 그렇지 않으면 삭제하는 것을 고려할 수 있습니다.
레위
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.