2013-04-29 23 views
0

在函數中檢查可選參數類型的最佳方法是什麼?我目前看到的每個例子都是下面的樣式2。這是比方案1更好的方法,還是僅僅因爲你無法直接檢查參數中的某些內容?如果通過,我需要可選參數作爲數組。PHP:什麼時候應該檢查數組的可選參數類型?

1)

public function foo($reqData, array $optData = NULL) { 
    ... 
    if ($optData) { 
    foreach ($optData... 
    } 
} 

OR 2)

public function foo($reqData, $optData = NULL) { 
    ... 
    if (is_array($optData)) { 
    foreach ($optData... 
    } 
} 
+0

兩者如何? 'if($ optDat!== NULL && is_array($ optData))' – Havelock 2013-04-29 19:43:30

+0

在第一個例子中,$ optData需要作爲一個數組提供。第二個可以是一個單值變量,它也可以是一個數組。這就是爲什麼用「is_array」進行調查。兩者都做同樣的事情 – Daniel 2013-04-29 19:45:08

+0

我知道他們都具有相同的結果結束,我在想,如果我失去了一些東西,因爲每次我已經能夠找到的例子是第二個樣式,當第一個樣式更加直觀我(至少來自我的背景與強類型語言)。 – Inukshuk 2013-04-29 19:51:30

回答

0

第二個選項是一般可取的,因爲如果你不是一個數組這是其他傳遞,你就會得到一個致命的錯誤:

function foo1 (array $opt) { var_dump($opt); } 
function foo2 ($opt = null) { var_dump($opt); } 

foo2(array('bar')); // dumps out an array with 'bar' in it 
foo1('bar'); // catchable fatal error 

如果PHP有函數重載,這不會是一個問題

0

OOP的興趣是添加約束來避免錯誤。如果你遵循這個想法,第一種方式似乎更好。

很多PHP developpers不習慣嚴格編碼爲C,因爲PHP是靈活/生性寬容和不放棄的習慣是最嚴格的。

相關問題