2013-05-03 64 views
0

這或多或少是可讀性,可維護性和/或最佳實踐類型問題。從函數中的多個點返回

我想獲得關於某事的意見。 return從一個函數中的多個點是不好的練習?例如。

<?php 

    // $a is some object 

    $somereturnvariable = somefunction($a); 

    if ($somereturnvariable !== FALSE) { 
     // do something here like write to a file or something 
    } 

    function somefunction($a) { 
     if (isset($a->value)) { 
       if ($a->value > 2) { 
        return $a->value; 
       } else { 
        return FALSE; 
     } else { 
       // returning false because $a->value isn't set 
       return FALSE; 
     } 
    } 
    ?> 

還是應該是這樣的:

<?php 

    // $a is some object 

    $somereturnvariable = somefunction($a); 

    if ($somereturnvariable !== false) { 
     // do something here like write to a file or something 
    } 

    function somefunction($a) { 
     if (isset($a->value)) { 
       if ($a->value > 2) { 
        return $a->value; 
       } 
     } 

     return FALSE 
    } 
    ?> 
+0

在這種情況下,我會選擇第二個版本,因爲它更具可讀性。當然,如果你需要返回兩個以上的可能值,第二種方式是不可能的。 – 2013-05-03 18:34:18

+0

看起來像一個偉大的[codereview](http://codereview.stackexchange.com/)問題... – 2013-05-03 18:36:48

+0

真的...但比我必須創建另一個用戶名,必須去多個網站的問題...艾因沒有任何機構爲此付出時間。 – 2013-05-03 18:41:24

回答

1

作爲一個實踐問題,我總是試圖從一個點中的任何功能,這通常是最後一點回來。我將它存儲在一個變量中,如$retVal,並將其返回到函數的最後。它使代碼看起來更加健全。

話雖如此,有些情況下說,在你的函數作爲第一行,你檢查var是否爲空,如果是,你是返回。在這種情況下,沒有必要持有該變量,然後添加額外的檢查以跳過所有函數代碼,最終返回該函數。

因此......總之,兩種方式都有效。它總是取決於情況是什麼以及你更容易接受什麼。

+0

plus,之前返回意味着如果它已被評估爲true,則不需要在返回值下面處理代碼。 – reikyoushin 2013-05-03 18:41:10

+0

@reikyoushin:的確如此。在較長的代碼中,它只是一種浪費,並且會使得函數變得雜亂無章。 – raidenace 2013-05-03 18:42:02

+0

對我來說聽起來不錯。我只是發現自己在不同的項目中以不同方式編寫類似的風格功能。或多或少取決於我當時的心情。我想結束內部辯論:D – 2013-05-03 18:43:22