為什麼好多人寫php的時候總是判斷反邏輯呢?

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 新手該如何學習使用開發框架,有案例嗎?

TAG:PHP | PHP框架 | PHP開發 |