第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP異常處理的疑惑

PHP異常處理的疑惑

PHP
暮色呼如 2019-04-09 05:04:39
PHP異常處理的疑惑
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊

SQL錯(cuò)誤是捕獲不了的,因?yàn)镻HP只要成功的把SQL命令提交給了數(shù)據(jù)庫服務(wù)器就算成功,至于數(shù)據(jù)庫里面執(zhí)行是否成功,必需在每個(gè)語句之后檢測(cè),例如:
$db=mysql_connect(...);
if (!$db){
echo '連接數(shù)據(jù)庫失敗,錯(cuò)誤原因:'.mysql_error();
exit;
}
再如:
$sql='...';
$res=mysql_query($sql);
if (!$res){
echo '執(zhí)行SQL語句錯(cuò)誤,SQL語句:'.$sql.'<br>錯(cuò)誤原因:'.mysql_error();
exit;
}



查看完整回答
反對(duì) 回復(fù) 2019-04-10
?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

throw new Exception('....');
是用來拋出一個(gè)自定義錯(cuò)誤 或者拋出當(dāng)前錯(cuò)誤給上一級(jí)的catch,比如你定義一個(gè)函數(shù)
function test($a)
{
if($a==1) throw new Exception('error');

}
這樣的話執(zhí)行test(1)會(huì)拋出一個(gè)“error” 錯(cuò)誤
try{
test(2);
test(1);

}
catch(exception,name){
echo($name->getMessage());
}


 


查看完整回答
反對(duì) 回復(fù) 2019-04-10
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

  在java、python等語言中,異常對(duì)于我們來說已經(jīng)是必不可少的錯(cuò)誤處理方式。異常處理是面向?qū)ο缶幊讨械囊环N很強(qiáng)大的特性,然而很多PHPer對(duì)它不了解,甚至認(rèn)為它會(huì)破壞代碼結(jié)構(gòu)。即使在很多開源項(xiàng)目中,也難以見到異常的蹤影。那么,PHP中的異常,到底有沒有意義呢?

  PHP有兩種錯(cuò)誤處理機(jī)制,一種是內(nèi)置錯(cuò)誤,一種是異常。

  內(nèi)置錯(cuò)誤,包含error、warning、notice等錯(cuò)誤類型。很多PHP的內(nèi)置函數(shù),和一些PHP擴(kuò)展,都會(huì)使用這種類型的錯(cuò)誤。此類錯(cuò)誤的優(yōu)勢(shì)是處理起來比較方便。不重要的錯(cuò)誤,可以通過配置php選項(xiàng)來忽略它。我們甚至可以通過set_error_handler()函數(shù),來集中處理非致命的錯(cuò)誤。但是,PHP的寬容往往會(huì)讓程序員養(yǎng)成一個(gè)壞習(xí)慣,那就是在代碼中留下大量warning、notice級(jí)別的錯(cuò)誤。這樣對(duì)程序的調(diào)試和后期維護(hù)帶來很多不便。而且致命的錯(cuò)誤(Fatal Error),是沒有辦法處理的。這也是PHP的一大硬傷。

  在PHP中使用異常有以下優(yōu)勢(shì):

  一、異常能提高程序的健壯性。
  在需要處理錯(cuò)誤的場景,異常能讓我們輕松掌控程序,采取相應(yīng)的處理措施。并不是所有的異常都需要處理。在一些異常發(fā)生時(shí),沒有其他替代方案,這時(shí)我們可以記錄一些錯(cuò)誤日志,并讓程序崩潰。在web應(yīng)用里,我們可以給用戶顯示一個(gè)500錯(cuò)誤頁面來增強(qiáng)用戶體驗(yàn)。一些PHP的開源庫會(huì)提供大量的異常類型,這樣會(huì)幫助我們快速找出代碼錯(cuò)誤,減少程序BUG。

  二、異常處理能增強(qiáng)程序的可維護(hù)性。
  函數(shù)應(yīng)該有一系列的輸入,并且有唯一的輸出。在參數(shù)不正確、或者發(fā)生系統(tǒng)錯(cuò)誤時(shí),我們需要告知使用者發(fā)生了什么樣的錯(cuò)誤,便于使用者處理和記錄。

  利用返回值、引用變量來返回錯(cuò)誤在PHP程序中很常見:
function foo($var) { if (!is_int($var)) { return array(-1, '參數(shù)1必須是整數(shù)'); } if ($var <= 0) { return array(-2, '參數(shù)1必須大于0'); } return $var;}  這樣的函數(shù)使用非常不方便。使用者需要通過判斷函數(shù)的返回值,來確保程序是否正常運(yùn)行。額外的邏輯判斷,會(huì)降低程序的可讀性。

  假如函數(shù)被修改為這樣:
function foo($var) { if (!is_int($var)) { return array(-1, '參數(shù)1必須是整數(shù)'); } if ($var <= 0) { return array(-2, '參數(shù)1必須大于0'); } return array($var, '');}  這時(shí)你外層的判斷邏輯就需要修改,是不是很麻煩?

  使用異常,在執(zhí)行失敗時(shí)拋出異常,可以讓函數(shù)的輸出非常干凈,避免額外的處理。減少了代碼量,也增強(qiáng)了程序的可維護(hù)性。

  三、使用異常有助于我們集中處理錯(cuò)誤。
  在程序拋出異常時(shí),只要沒有遇到try catch,異常會(huì)逐漸向函數(shù)調(diào)用堆棧頂層傳遞。這樣我們不需要每一層都處理錯(cuò)誤。我們可以在程序的入口處集中處理所有未處理的異常,有助于我們發(fā)現(xiàn)潛在的程序BUG。而一個(gè)只會(huì)返回正常處理結(jié)果和錯(cuò)誤代碼的函數(shù),在其出錯(cuò)時(shí)不得不立即處理。如果我們想在代碼頂層再處理這個(gè)錯(cuò)誤,就不得不一層一層返回這個(gè)錯(cuò)誤,給程序設(shè)計(jì)帶來很多不便。

  綜上,我們應(yīng)該盡量使用異常,保證程序的可靠性。


 


查看完整回答
反對(duì) 回復(fù) 2019-04-10
  • 3 回答
  • 0 關(guān)注
  • 505 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)