close
話說我個人對函數的設計比類別的設計來的有興趣的多,函數的設計有許多地方是有準則可以遵循的,我希望在我的程式設計生涯中,能找出這些準則。

這篇主要在探討在函數中,執行「中斷」的一些設計準則。
所謂的「中斷」,是一種條件,這種條件使函數執行失敗時跳脫程式既定的「循序流程」,亦可能引發錯誤而使程式停止。

補述:我個人其實並不喜歡「例外處理」,我覺得在使用「例外處理」之前,設計者應盡到責任,將可「自理」的部份做好處理。濫用「例外處理」的結果,就會把「所有的責任」推給作業系統來收爛攤子。

讓我們考慮這一類型的函數:
  • 這類函數進行一些單純的動作,執行結果只有成功或是失敗兩種結果。
  • 呼叫該函數時,我們對其成功或失敗的原因不感興趣,我們只希望知道其執行結果到底是成功或是失敗。
  • 在其執行失敗時,有時會需要將程式流程中斷下來,我們需要一個條件去指示是否需要進行中斷。
這裡的中斷條件是一個布林值,會當作函數的參數之一傳進函數內。
先舉個例子來看看:

function 載入:模組($模組, $中斷 = true){
    $前綴 = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : '';
    if(!extension_loaded($模組) && !@dl($前綴.$模組.'.'.PHP_SHLIB_SUFFIX)){
        if($中斷){
            $訊息 = '無法載入 '.$模組.' 模組';
            trigger_error($訊息, E_USER_ERROR);
//            exit($訊息);
        }else{
            return false;
        }
    }else{
        return true;
    }
}


這是一個載入 PHP Extension 用的函數,在實務上,當我們的 PHP 程式在執行時,有時必須載入某些模組,當這些模組無法載入時,則必須強制停止程式的執行。

先不論這裡的錯誤處理方式是否優雅,我們關注的是,中斷行為是一個(可控)條件,當執行失敗時,我們可以選擇是中斷。
arrow
arrow
    全站熱搜

    HACGIS 發表在 痞客邦 留言(5) 人氣()