2015-05-10 45 views
2

我有一個函數php函數參數默認值 - 如何知道def。價值被應用了?

function my_func($id,$arg1='aaa',$arg2='bbb'){ 
if($arg1=='aaa'){ 
    //means that def. value applied, real argument has not been provided 
} 
if($arg1=='bbb'){ 
    //means that def. value applied, real argument has not been provided 
} 
} 

檢查我的值是默認的,我會做的一件事,如果不是 - 是另一回事。 但我的用戶可以調用像

my_func($id,'aaa','bbb') 

我的功能,所以他提供了真正的價值。我如何知道這些值在我的代碼中是真實的,而不是默認值?

+0

你是衝突你的問題本身?根據第一個你在第二個代碼中給出的def值並不是真正的參數。所以請讓你的問題更清楚。 –

+2

你不能。使用'NULL'作爲隱含值,並自己設置默認值。更重要的問題是爲什麼你想區分調用者或運行時提供的相同值。 – mario

+0

謝謝!對不起,我不明白爲什麼我的問題本身就是相互衝突的。我需要知道什麼時候在我的代碼中有def值,並且當用戶提供了所有參數,但值與默認值相同時。問題是def的邏輯是不同的。和真實的價值。如果兩個邊是相同的,那麼這是一個問題。換句話說,my_func(10000)和my_func(10000,'aaa','bbb')會做完全不同的事情,但在my_func裏面,沒有任何信息是那些值默認或不是。我希望現在更清楚。謝謝 – avalon

回答

2

在PHP中,當用戶提供一個可選參數的默認值時,結果爲,正好是,與參數不存在時相同。沒有辦法來區分差異。

可以做的是設計你的函數,以便默認值不能與實際有用的參數混淆。然後,您可以檢測到這種情況,並提供您在此情況下想要使用的真實的值。例如:

function my_func($id,$arg1=null,$arg2=null){ 
if($arg1===null){ 
    $arg1 = "aaa"; 
    // do other default things 
} 
if($arg2===null){ 
    $arg2 = "bbb"; 
    // do other default things 
} 
} 

如果呼叫者與"aaa"調用函數,它不會被誤認爲是默認參數。當然,調用者總是可以調用函數null作爲值,這與無缺少的參數是無法區分的;但這不是一件真正的壞事,特殊的價值觀只是意味着「做默認的事情」。

+0

謝謝!是的,我想到了空值,但決定在你的幫助下弄清楚。換句話說,我們有一個func check_pwd($ site_id,$ login ='def_login',$ passwd ='def_pwd')。但是如果登錄/傳遞偶爾會是'def_login'和'def_pwd'呢?但是上面提供的解決方案並不能涵蓋用戶需要提供空值的情況。所以在這種情況下,我想我需要考慮系統中保留的特殊def值。我認爲有那樣的規格常量或功能在PHP中可能會檢查是否提供了參數。據我所知,它不存在。謝謝 – avalon

+0

對不起,我不知道你在評論中想說什麼! – alexis

+0

對不起,我剛剛編輯它,它並沒有完全保存。謝謝 – avalon