2012-06-11 114 views
12

在PHP中,我們可以通過默認參數的函數,像這樣PHP默認參數的函數調用

function func_name(arg1,arg2=4,etc...) { 

,但據我瞭解,我們無法通過一個函數調用,所以這是非法的:

function func2_name(arg1,arg2=time(),etc...) { 

所以當我想要做一個函數值(想象時間函數的值不能在運行時間之前知道),我必須做一些凌亂的工作,像這樣:

function func3_name(arg1,arg2=null,etc...) { 
    if(arg2==null) arg2 = time(); 

我想知道如果有人知道更好的方式,一個更清潔的方式來傳遞函數調用值作爲默認參數在PHP中?謝謝。

在php語言設計中也有任何根本原因,它不允許函數調用作爲默認參數(就像它在預處理中做了一些特殊的事情?),或者這可能成爲未來版本的一個功能?

+2

這對我來說似乎並不混亂。 – Josh

+1

看看[這個類似的問題](http://stackoverflow.com/questions/8740687/php-function-as-parameter-default)的替代品。 – Quantastical

回答

13

那麼,簡單的答案是,沒有更好的方法來做到這一點,據我所知。但是,你可以通過使用三元運算符使它看起來更整潔一些。

function func3_name(arg1,arg2=null,etc...) { 
    arg2 = (arg2==null ? time() : arg2); 
} 
+2

我想你的意思是arg2 =(arg2 == null)? time():arg2; –

2

Connor是100%正確的;但是,從PHP 7起,您現在可以使用null coalesce operator

$arg2 = $arg2 ?? time(); 

只是一個短,可以說是清潔的,這樣寫。