2013-07-08 71 views
-2

假設我已向一個php文件發出ajax請求。當結果是成功或其他的時候。我不需要我的服務器來完成其餘的代碼。所以我在考慮使用exit函數,但有太多的exits是一個很好的做法?蔭不知道使用太多出口是一種好的做法?

if(some condition) exit("success"); 
    else if(some condition) exit("fail"); 
// after some 3 lines or so 
if(fail) exit("error"); 

php使用太多的退出函數是一個好或壞的做法。誰能告訴我使用exit函數有沒有什麼限制。我被告知,你不能在一個函數中使用太多的return語句,而且我認爲不可能更頻繁地使用exit。使用太多的exit功能是一種錯誤的做事方式?

任何幫助,非常感謝。謝謝

UPDATE當它滿足給定的要求時,不需要進一步執行代碼。我不希望我的服務器停下來,遇到結束我可以簡單地退出。它使我猜得更快?

+1

它沒有什麼不對。但是您可能想要放入一些對您的JS代碼有用的額外數據,以向用戶解釋爲什麼失敗。例如「對不起,但你沒有遇到'某種條件'」,而不僅僅是「失敗」。 –

+1

這不是「壞習慣」,但可能是設計不佳的標誌。我也不會說這是「好的做法」。 –

回答

2

我更喜歡有多個退出消息,繪製方法中有多個返回語句之間的關聯。

如果沒有多個出口的消息,我覺得你的代碼將是一種醜惡:

$retCondition = "success"; 

if(!some condition) { 
    if(some condition 2) $retCondition = "fail"; 
    else { 
    ..Your code 
    } 
} 
exit($retCondition); 

這是怎樣的一個PHP的解決方案,但你的想法。

2

對我來說這是錯誤的做法。如果可能的話,有一個入口點和一個出口點 - 它與什麼語言無關。我關心我的時間,這種方法只是幫助閱讀,維護和調試代碼。

編輯

要總結我的觀點在這裏(或跟隨評論):這不是黑/白的情況下,所以你永遠不應該是真正的100%嚴格的,但我傾向於避免過早的回報,如果我發現這造成了可讀性的損失,這對我來說是一個充分的理由,但我有時也同意做相反的事情,如果代碼只是看起來像所有嵌套if()/else塊的聖誕樹。

+0

這是否意味着你反對早期「返回」的方法呢? – PeeHaa

+1

只要不隱藏在代碼中,多次返回都可以。在我看來,多個退出是不好的 – exussum

+0

總的來說 - 是的,我反對。如果方法複雜且條件顯而易見,那麼我可以接受提前退出 - 那麼提前退出()而不是另一個代碼塊對我來說可以作爲一種例外(但由於它清晰可見而被允許)。但是我不接受代碼中間的'exit()'或'return()' - 你可以輕易忽略它,所以它基本上是壞事。而且由於我不喜歡規則的很多例外(所以他們保持簡單明瞭),那麼一入一出就是我儘可能擁有的東西 –

0

使用退出是一種不好的做法。

<?php defined('FOO') or exit('Foo not set');?> 
<?php mysql_connect('usr','pwd','host') or exit('could not connect');?> 

對於正常情況下例如「如果」聲明:

if (condition) { 
    echo 'Hello'; 
} else { 
    callSomeFunction(); 
} 

假設你有一個Foobar的功能:

function fooBar() { 
    if (condition) { 
    return 'Hello'; 
    } else { 
    return FALSE; // If you use return the function 'fooBar' stops at that point 
    echo 'Hello?'; // This is not executed because we already returned. 
    } 
} 
例如,如果關鍵代碼失敗時,才應使用

祝你好運

+1

「只有在關鍵代碼失敗時才應使用」header('Location:http://example.com');退出;'< - 沒有關鍵只是失敗 – PeeHaa

+0

這是一個你應該使用exit的地方。 – Airoude

0

如果你使用的是真正的面向對象風格,它應該是structu紅類似於以下

function foo($x){ 

    if (!is_int($x)) throw new Exception('foo needs an int argument'); 

    return $x *2 

} 

現在只有一個回報,當你調用該方法使用

$variable = 0; 

try{ 

    $variable = $this->foo(2.5); 

}catch(Exception e){ 

    print_r($e) 
} 

,它允許你看到的問題,並以可控的方式處理它。

它遵循具有1「開始」和1「端」的流程圖的方式,但允許非常詳細消息將被顯示等

1

我更喜歡exit如果redirecting使用headers

使用 Exception和只使用
try { 

    if (! $conditionA) { 
     throw new Exception(" Fail ConditionA"); 
    } 

    if (! $conditionB) { 
     throw new Exception(" Fail ConditionB"); 
    } 

    header("Location: xxx"); 
    exit(); 

} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

@PeeHaa ... lol done .... – Baba

+0

<3 ... 6更多... – PeeHaa

0

它不會導致任何問題,但只有一個退出點是很好的。它可能會使調試更容易。你可以這樣做:

if(some condition) $error_msg = "success"; 
else if(some condition) $error_msg = "fail"; 

// after some 3 lines or so 
if(fail) $error_msg = "error"; 

if($error_msg != '') exit($error_msg); 
相關問題