2013-05-03 73 views
0

我創建了一個主類,所有我的主要成員激活失活的功能是,所有與之相關的其他事情也做擁有更高效的代碼返回

這個主類(包含一些重要的功能一起)錯誤從不同的地方,包括通過捲曲

現在讓我activaton功能(其中一個主要的功能)在

activationFunction($data) 
{ 
//use data to generate total, discount etc 

$this->giveAffiliates($total); 
if($this->_error){ return $this->_error;} 

$this->activateOrder($total,$discount,id); 
if($this->_error){ return $this->_error;} 

$this->activatePlan($total,$discount,id); 
if($this->_error){ return $this->_error;} 

//similarily calling various functions which themselves call other functions 

} 

activatePlan() 
{ 

try{ 

//call other functions and do necessary stuff for plan A 

} 
catch(Exception $e) 
{ 

$this->_error.="Error occurred while activating plan A"; 

} 
//for plan B 
try{ 

//call other functions and do necessary stuff for plan B 

} 
catch(Exception $e) 
{ 

$this->_error.="Error occurred while activating plan B"; 

} 

//for other plans similarily 

} 
} 

現在的問題是每個子函數調用後有if($this->_error){ return $this->_error;}類(共我打電話一個m有大約35條這樣的相似線) 我需要這個,因爲我需要將錯誤發送給用戶並阻止我的代碼進一步運行。但它使我的代碼長而且效率不高。 如何減少所有這些返回值,但在其中一個子函數失敗時向用戶顯示錯誤,並嘗試保留我的代碼結構。 我必須調用每個主函數的各種子函數(這我不能改變,只有一個類和其中的各種函數),並且錯誤將主要在每個級別被捕獲並返回(很少有簡單的錯誤是沒有返回並且代碼被允許繼續運行)。 我還必須記住,稍後可能會添加其他各種功能,並且它應該足夠靈活,以便稍後處理所有內容。

+0

我不認爲代碼執行效率真的是這裏的問題。代碼可維護性/可讀性。 – 2013-05-03 21:01:02

+0

是代碼的可維護性/可讀性肯定是一個問題,如果不是主要問題 – user1913849 2013-05-03 21:08:01

回答

2

您說「這會讓我的代碼變得很長而且效率不高。」你究竟是什麼意思「不高效」?你是說你的代碼很慢嗎?

如果您的代碼太慢,那麼您需要使用類似XDebug這樣的工具來分析您的代碼,以準確找出您的代碼的速度緩慢。如果你不測量,你只是猜測問題是什麼。

+0

好吧,在每個函數看起來錯誤後,如果有錯誤存在,我想知道是否有更好的方法,然後檢查35次是否有錯誤然後將錯誤發送給用戶(我確信這樣的代碼不會被稱爲高效的,並且隨着事情變得更加複雜並且稍後將其添加到它中,它肯定會使其變慢) – user1913849 2013-05-03 21:00:32

+1

「在我看來是錯誤的」 ?你認爲這需要很多時間嗎?我敢打賭它沒有。你需要測量才能知道。你正在做出很多猜測(「肯定會讓它變慢」,「看起來錯了」,「我確信這樣的代碼不會被稱爲高效的」),但是你需要使用一個工具來告訴你,如果你的猜測是正確的。否則,你會浪費你的時間來加速實際上並不慢的事情。 – 2013-05-03 21:02:29

+0

好吧用工具也可以測試它 – user1913849 2013-05-03 21:06:59

0

我認爲每個函數都應該處理自己的錯誤/異常。這樣你就不會將所有的錯誤處理全部推送到函數被調用的地方。函數的調用者不需要包含關於如何從被調用的函數生成錯誤通知的邏輯。

所以說你有每個函數在錯誤情況下拋出異常。你可以這樣做:

activationFunction($data) 
{ 
    //use data to generate total, discount etc 
    try { 
    $this->giveAffiliates($total); 
    $this->activateOrder($total,$discount,id); 
    $this->activatePlan($total,$discount,id); 
    } catch (Exception $e) { 
    // throw the exception up the call chain 
    throw $e; 
    } 
} 
+0

但是讓我們在activatePlan函數中說:我的計劃updation沒有給出任何錯誤,但是我的計劃B給出了錯誤,我將如何確定計劃B給出了更新錯誤,而不是計劃它可能並不容易確定發生了什麼錯誤,特別是如果同一個表得到更新,其差異很小 – user1913849 2013-05-03 21:06:08

+0

@ user1913849這就是您想要放入異常的所有消息。您可以在被調用的函數內根據需要進行特定操作,該函數將拋出異常以引發異常。您也可以創建自己的自定義異常類型,這些類型從基本異常繼承(這實際上是一種很好的做法)。所以說你有一個數據庫連接問題,你可以拋出一個DBException),或者如果你在讀寫文件系統時遇到問題,你可能會拋出一個IOException異常。如果你喜歡,你可以根據他們的類來處理捕捉到的異常。 – 2013-05-03 21:07:57

+0

我不能用「throw $ e;」因爲當我從不同的地方調用這個類並通過curl執行所有的東西並以json格式返回數據時,它會發出各種錯誤。我必須將它存儲在一個變量中,然後返回該變量。另外,根據具體的消息返回消息返回後,從調用者文件運行的特定代碼 – user1913849 2013-05-03 21:12:10