1. 程式人生 > >關於exit()以及 die()與exit()區別

關於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。