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

來源:互聯網
上載者:User
關鍵字 index post clean return this
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外面),避免多層嵌套。

上一張圖片,題主感受一下:

這是一種逗比式的防禦式編程。正常的防禦式編程是沒有 else 的。這個例子裡,我傾向於樓主說的寫法。但是如果異常太多,那就不要 else 了。碰到錯誤就返回。有一種風格叫防禦式編程,這是基本做法之一。因為不是先行編譯的語言,所以會把異常狀態寫到代碼前面,出現異常的時候,儘早結束指令碼。補充一下:參考《重構:改善既有代碼的設計》第 9 章 - 簡化條件運算式
Replace Nested Conditional with Guard Claused(以衛語句取代嵌套條件運算式)謝謝大家的回答,這個問題主要是涉及到編程模式和人的思維兩個方面。主要有兩種方式可以表達:



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是否存在1. 為了儘可能地減少縮排的使用。
2. 防禦式編程。
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.