關於exit()以及 die()與exit()區別
先來了解一下exit(),
exit()是個語法結構
中止指令碼的執行。 儘管呼叫了 exit(), Shutdown函式 以及 object destructors 總是會被執行。
<?php class Foo { public function __destruct() { echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL; } } function shutdown() { echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL; } $foo = new Foo(); register_shutdown_function('shutdown'); exit(); echo 'This will not be output.'; ?>
程式輸出:
Shutdown: shutdown() Destruct: Foo::__destruct()
1、用法習慣不同,當傳遞給exit和die函式的值為0時,意味著提前終止指令碼的執行,通常用exit()這個名字。
2、名字不同,其實PHP手冊已經說過“die — Equivalent to exit().This language construct is equivalent to exit(). ”兩者只是別名關係,除此之外完全一樣。
3、原始碼的處理方式不同,無論是別名函式還是別名語言結構,從實際效果角度講,都是一樣的,但是原始碼的處理方式還是有一定的差異。
擴充套件資料:
die()和exit()差異例項:
zend_language_parser.c中,定義了一個巨集
#define T_EXIT 300
還定義了一個enum,裡面也有
enum yytokentype {…T_EXIT = 300,….}
這裡告訴我們,T_EXIT這個token,它的code是300。
再看zend_language_scanner.l,其中有這麼幾行程式碼。
<ST_IN_SCRIPTING>”exit” {return T_EXIT;}<ST_IN_SCRIPTING>”die” {return T_EXIT;}
很明顯,php做詞法分析時,無論遇到exit還是die,都會返回T_EXIT這個token。從這裡酒可以證明,die和exit,再php內部處理是完全一樣的。
也可以用下列php程式碼來確定:
<?phpvar_dump(token_get_all(“<?php die;exit;?>”));
返回的結果中die和exit對應的token code,都是300。