簡體   English   中英

echo('exit'); 和有什么區別? 死; 和死('退出');?

[英]What is the difference between echo('exit'); die; and die('exit');?

我見過一些代碼這樣做:

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

和其他只使用die的人:

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

它何時結束程序是否有任何內在差異,我應該知道它之后的代碼嗎? 等等

更新

我主要是問,它是否是一種編碼風格,或者是否有真正的原因為什么有些編碼方式是一種方式而不是另一種方式。 我不是在問exitdie之間的區別是什么。

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

我更喜歡die("exit")方法,因為它打字更少,更容易注釋掉並且語義更清晰。

至於“速度”,你為什么要關心哪個更快? 你需要你的程序很快死掉嗎?

回復:你的更新

...結束程序的任何固有差異...

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

RE:您的評論/第二次更新

die的方式是個人喜好的問題。 正如我所說,它們是相同的 出於上面列出的原因,我會選擇第二個選項:更短、更清晰、更干凈,在我看來這相當於“更好”。

exitdie之間的區別在於exit允許您返回非零狀態,而die返回 0。 function 都不是“更好”,它們用於不同的目的。

沒有不同。

既然你死了,為什么還要要求速度差異。

來自 php 手冊:

注意:這個語言結構等價於 die()。

但是dieexit之間仍然存在區別:

使用 die() 你可以發布一個字符串: die("An error occurred");

使用 exit() 的結果相同

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

或者,如果您是 cli 或 unix shell:

在命令行上使用 PHP,die("An error occurred") 簡單地將“An error occurred”打印到 STDOUT 並以正常退出代碼 0 終止程序。

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

有區別的家伙。 DIE() 可以與其他可失敗的函數一起使用,而回顯則需要作為錯誤或異常來捕獲。

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

為您提供即時捕獲/死亡序列。

對於您發布的具體示例,它們是相等的,因為$status是一個字符串,但正如手冊所說,情況可能並非總是如此:

如果 status 是一個字符串,這個 function 在退出之前打印狀態。

如果狀態是 integer,則該值將用作退出狀態而不打印。 退出狀態應在 0 到 254 范圍內,退出狀態 255 由 PHP 保留,不得使用。 狀態 0 用於成功終止程序。

因此,如果您想要 output 而不是'exit from program' ,例如42 ,您真的需要這樣做:

echo 42; die();

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

主要是編碼風格。 但是,如果您要輸出調試消息,則 echo then die 更好:

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!":"");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM