2011-04-28 90 views
8

我已經看到了一些代碼,這樣做:echo('exit');有什麼區別?死;和死('出口');?

if(something){ 
    echo 'exit from program'; 
    die; 
} 
...more code 

和其他人只使用die

if(something) die('exit from program'); 
...more code 

有沒有在什麼時候會結束程序的任何固有的差異,我應該知道的它後面的代碼?諸如此類

UPDATE

我要求主要是,如果它是一種編碼風格,或者如果有,爲什麼有些是編碼的一種方式與另一個真正原因。我不是問exitdie之間有什麼區別。

+2

我真的不認爲這是值得關心 – gd1 2011-04-28 21:04:36

+0

我認爲這是一個錯誤,PHP可以讓你做到這一點的方法不止一種。不要擔心。 – Halcyon 2011-04-28 21:19:11

+0

@Frits:這不是一個錯誤,它是故意的行爲,類似於能夠使用'print'或'echo' – 2011-04-28 21:20:43

回答

21

不,沒有區別;他們都會將"exit"寫入STDOUT並終止程序。

我更喜歡die("exit")方法,因爲它更少打字,更容易註釋和語義更清晰。

至於「速度」,爲什麼你會在乎哪個更快?你需要你的程序真的很快死掉嗎?

回覆:您的更新

...在什麼時候會結束程序的任何固有的區別...

沒有差異,固有的或以其他方式。它們是相同的。第二個選項die('exit')是單個語句,因此與if語句一起使用時不需要大括號;這與die無關,與C語言中的塊和流控制有關。

回覆:您的評論/秒更新

哪種方式,你die是個人喜好的問題。正如我所說,他們是相同的。我會根據上面列出的原因選擇第二個選項:更短,更清晰,更清晰,這在我看來意味着「更好」。

exitdie之間的區別是,exit允許你返回一個非零的狀態,而die返回0。無論是功能是「更好」,他們的目的不同。

+0

我改變了我的一點 – Neal 2011-04-28 21:05:53

+18

生活快,死去年輕,留下美麗的日誌文件。 – vichle 2011-04-28 21:05:54

+1

+1你讓我輕笑 – Khez 2011-04-28 21:06:10

1

沒有區別。

爲什麼要求速度差異,因爲你正在死亡。

+0

以及一個可能會很慢,痛苦的,而另一個是快速和容易的,我知道什麼? – Neal 2011-04-28 21:14:13

+6

聽說過安樂死? :) – manojlds 2011-04-28 21:19:36

+0

:P(13更多垃圾字符) – mathk 2011-04-28 21:43:56

0

有一個不同的傢伙。 DIE()可以與其他failable函數一起使用,而回聲則需要作爲錯誤或異常來捕獲。

$query = mysql_query("SELECT * FROM tablename") OR DIE(mysql_error()); 

給你一個直接的捕獲/死亡序列。

+1

@meagar這是真實的.... – Neal 2011-04-28 21:37:28

+0

'$ query = mysql_query(「SELECT * FROM tablename」)or exit(mysql_error()); '也行得通。 Die()和exit()是等價的。 – Arjan 2011-04-28 21:52:38

+0

@Neal這與'die'無關;你可以用任何一系列陳述書寫'',這不是'die'特有的語言特徵。在我還沒有評論的答案中也評論'@ meagar'不起作用。 – meagar 2011-04-29 03:29:25

0

對於具體的例子,你張貼他們是平等的,因爲$status是一個字符串,但作爲the manual說,這可能並不總是如此:

如果狀態是一個字符串,這個函數 打印的退出前的狀態。

如果status是一個整數,那麼將使用該值 作爲退出狀態,並且不打印 。退出狀態應爲 ,範圍爲0到254,退出狀態 255由PHP保留,不應使用 。狀態0用於 成功終止程序。

所以,如果不是'exit from program'你想輸出,說42你真的需要做的:

echo 42; die(); 
+0

我不能死(42);'?那不會做任何事情?結果會是什麼? – Neal 2011-04-28 21:44:00

+0

@Neal:我沒有說過它不會做任何事情,但它肯定不會* echo *'ed!如果你死了(42)'執行以退出狀態42結束,這在CLI(命令行界面)環境中主要是有用的。只是需要尋找的東西,因爲如果你不小心(如果你做了'mysql_query('...')或者死掉(mysql_errno())'''''''''''''',那麼你可能會在腳下開槍。 – 2011-04-28 21:48:02

+0

@Alix我的印象是隻有'exit(42)'這樣做,'die'總是以'0'退出 – Neal 2011-04-28 21:56:44

0

的語言結構exit()die()是等價的,至少根據PHP手冊。當應該到達該行時,我使用exit(),並且希望腳本在該點停止。另一方面,Die()則適用於不應發生的情況。這對我來說最爲自然,你不必同意。

0

它主要是編碼風格。但是,如果你是輸出調試消息,回聲再死好:

echo "The frobnuticator blew up!"; 
die; 

成爲

//echo "The frobnusticator blew up!"; 
die; 

當然,你最有可能

if ($debug) echo "The frobnusticator blew up!"; 
die; 

哪個更容易在我的眼睛上比

die($debug?"The frobnusticator blew up!":""); 
+0

呵呵?爲什麼你不能這樣做:'死(「frobnusticator爆炸了!」);' – Neal 2011-04-28 22:49:00

+0

因爲輸出可能會回顯到瀏覽器,這在調試中很好,但在生產中沒有問題。是的,你最好配置這個。 – 2011-04-28 23:00:03

+0

反正你不應該在生產代碼中死掉。 'die'就像''assert'' - 當你測試了足夠好的代碼以生產代碼時,你的代碼應該無法達到'die'聲明。 – meagar 2011-04-29 03:38:21

0

從php手冊:

注意:此語言結構等同於die()。

但還是有差別之間退出

使用模具(),您可以發佈一個字符串:死亡( 「出現錯誤」);

同樣的結果,使用的exit()

<?php 
    echo("An error occurred <br>"); 
    exit(0); 
?> 

或者如果你是CLI或UNIX外殼:

在命令行中使用PHP,死( 「出現錯誤」)只需向STDOUT打印「發生錯誤」,並以普通退出碼0結束程序。

<?php 
    fwrite(STDERR, "An error occurred \n"); 
    exit(0); // 
?>