為什麼好多人寫php的時候總是判斷反邏輯呢?
01-29
function get_post($index = , $xss_clean = FALSE)
{ if ( ! isset($_POST[$index]) ) { return $this-&>get($index, $xss_clean);}
else { return $this-&>post($index, $xss_clean); }}比如ci源碼中的get_post函數,為什麼不直接這樣寫:if ( isset($_POST[$index]) ){ return $this-&>post($index, $xss_clean);}
else{ return $this-&>get($index, $xss_clean);}
講道理,如果是控制器里,反邏輯一判斷不合法就跳轉了,不用再進行下去了
這是一種逗比式的防禦式編程。正常的防禦式編程是沒有 else 的。
有一種風格叫防禦式編程,這是基本做法之一。
因為不是預編譯的語言,所以會把異常狀態寫到代碼前面,出現異常的時候,儘早結束腳本。
補充一下:參考《重構:改善既有代碼的設計》第 9 章 - 簡化條件表達式
Replace Nested Conditional with Guard Claused(以衛語句取代嵌套條件表達式)
頁面載入時候要判斷參數的合法性,如果不合法就直接列印出錯誤信息然後結束。所以不合法情況的代碼要比另外一種情況短得多。另外,由於不合法情況已經退出了,後面的代碼可以捋直(寫在else外面),避免多層嵌套。
上一張圖片,題主感受一下:
謝謝大家的回答,這個問題主要是涉及到編程模式和人的思維兩個方面。主要有兩種方式可以表達:
if ( isset($_POST[$index]) )
{return $this-&>post($index, $xss_clean);}
else{return $this-&>get($index, $xss_clean);}還有以下的防禦式:
function get_post($index = , $xss_clean = FALSE)
{if ( ! isset($_POST[$index]) ){
return $this-&>get($index, $xss_clean);}return $this-&>post($index, $xss_clean);}個人覺得是思維的問題 如果沒有設置則。。否則。。也可能和人的期望有關======這裡的代碼主要是優先順序的問題吧,post優先順序高於get所以先看下post是否存在
這個例子里,我傾向於樓主說的寫法。但是如果異常太多,那就不要 else 了。碰到錯誤就返回。
推薦閱讀:
※9段PHP實用功能的代碼推薦
※Linux下php-fpm進程過多導致內存耗盡問題解決
※PHP易錯面試題收集-持續更新
※PHP 新手該如何學習使用開發框架,有案例嗎?