2010-06-26 140 views
3

我正在閱讀一些有關PHP的書(特別是Welling和Thomson的「PHP和MySQL Web Development」),我也是一名新的本科生。我有點好奇爲什麼作者決定選擇兩種不同的方法來終止函數的執行,例如PHP函數的返回值和例外

if (!$result) { 
    throw new Exception('Password could not be changed.'); 
} else { 
    return true; 
} 

對我來說,這似乎有點不一致,它會更有意義的返回false並讓調用者檢查被調用者的返回值並處理它。 PHP代碼是否像這樣常見?這是使用異常時預期的風格類型嗎?

+0

這兩個,威靈和湯姆森是着名的,他們沒有線索。使用例外來驗證用戶輸入是一個有風險的遊戲。我只是限制它只用於系統錯誤 – 2010-06-26 03:50:58

+0

我認爲是這樣:)說實話,它似乎像使用'Exceptions'這樣的事情有點沉重。 – SHC 2010-06-26 04:01:52

回答

2

是的,我同意它沒有多大意義。要麼通過返回值發出錯誤信號,要麼發生異常。如果返回值始終爲true(錯誤時會引發異常),那麼您最好不要返回任何內容(在PHP中相當於返回NULL)。

1

當你看到PHP代碼的時候,大部分時間都是關於編碼它的人和他們特定的風格。

我看不出有關代碼片段的不一致。例外是處理大多數語言錯誤的適當方式。他可以省略return語句,但我知道很多人覺得函數應該總是返回一個值。

+0

我覺得如果這個函數更加一致,那麼返回值應該反映出來。與strcmp()返回< 0, 0, or > 0相同的方式,我覺得使用一致的返回值類型會更有意義。說實話,我們從來沒有在大學裏學到很多關於異常和異常處理的知識,所以我不確定這種編碼風格是否應該在商業代碼中應用。 – SHC 2010-06-26 01:35:39

+0

我們正在看的只是一個代碼片段。判斷如何處理執行流程是非常困難的。就個人而言,我不會在if語句中拋出異常。我不想用方括號包裝執行代碼會幫助它。在我看來,就錯誤處理而言,異常是因爲try..catch塊而要走的路。它使您有機會在執行之前糾正或抑制錯誤。 – 2010-06-26 01:55:36

1

它似乎純粹是文體。我同意你的觀點:返回true或false會更加一致,如果false意外或不可接受,調用代碼應該拋出異常。

我不認爲PHP社區已經完全制定了這樣的行爲約定,所以我不會說它是普遍的或不常見的。有這樣的系統有一百種不同的方式是用PHP設計的。