2013-07-10 47 views
0

我將參數傳遞給PHP中的函數。我不知道參數是否定義。 現在我檢查參數是否定義,如果不是在調用函數之前強制轉換爲null。 有沒有一種更優雅的方式通過鑄造或類似的方式來做到這一點?如果參數未定義,我希望使用函數默認值。PHP:如何傳遞可能未定義的參數

例子:

//Params['x'] may or may not be defined 
// I want to use this: 
a(params['x']); 

//Currently I use this (which I want to avoid) : 
a(isset (params['x'])?params['x']:null); 


function a (data=null){ 
// Here I want data to be null if params['x'] is not defined. 
} 

回答

3

這是可能的,如果你宣佈這個參數作爲參考:

function fun(&$param = null) { 

} 

請記住,這也將創建該條目,如果它是不存在的傳遞的數組,所以如果你有

$x = array('a' => 1); 

而你會叫fun($x['b']);,你的$x看起來像

$x = array('a' => 1, 'b' => null); 
0

對於那些你不知道存在,必須有在那裏你測試和/或確保它的存在一點的一切。你可以做到這一點與isset/empty或與保證值存在,就像操作:

$params += array('x' => null); 

你不應該設計自己的函數來解決參數調用者可能沒有。如果該功能需要參數,則讓它需要參數,句點。在代碼中,您越早離開可能或不可能的模式,您就可以更快地請求並返回定義的值,從而減少需要編寫和調試的代碼量。我的意思是唯一的不確定性應該是用戶輸入;儘可能早地將不確定的用戶輸入到已定義的表單中,然後在內部對您的應用程序進行嚴格的限定,並返回其中的內容,而不是在每個單一點都不確定。

0

你已經完成了所有你需要做的事情。

有了這個函數原型你說,接受調用者傳遞的任何參數,或者如果沒有傳遞任何參數,則使用NULL。

function a ($data=null){ 
    if ($data == null) { 
     // no parameter passed by caller 
    } 
} 

忘記所有與功能的調用參數fussing。它的一切都爲你完成。

相關問題