2011-09-21 42 views
0

當我想郵寄我的用戶來通知他們某些事件時,我會在PHP中調用mail()函數。我想爲郵件函數提供第五個參數,但由於在safe_mode中這是禁用的,所以當給出這個參數時,mail()函數將返回false。我的問題基本上是:如何在PHP中滿足條件時提供參數?

我怎麼可以這樣寫一段代碼:

if (!$bSafeMode) { 
    mail($sTo, $sSubject, $sBody, $sHeader, $sFifthArgument); 
} else { 
    mail($sTo, $sSubject, $sBody, $sHeader); 
} 

但在這樣的方法:

mail($sTo, $sSubject, $sBody, $sHeader, (!$bSafeMode? $sFifthArgument : '')); 

顯然,這種代碼我給你不工作,但我想知道是否有類似的東西,這樣我可以保持我的代碼更整潔。

請不要與我爭論,爲什麼我要這樣做,爲什麼我想檢查safe_mode和東西。我只是這樣做,我只想知道我想要什麼是可能的,以及我會如何去做。

在此先感謝!

+3

更好,我會認爲你的代碼的第一塊看起來就好了。 – NullUserException

+0

你的第二個例子看起來很好,除了你通常會傳遞'NULL'而不是缺少參數的''''空字符串。另一個解決方法選項是'call_user_func_array',但並不真正具有「整理者」的資格。 – mario

+0

如果你不想要可能幫助我們理解目標的論據,那麼可能像SO這樣的公共格式不適合你?我沒有看到第一種和第二種形式之間的區別,只是第二種不起作用。第一個「if」的重要組成部分是什麼,所以我們可以和你一起思考? – Nanne

回答

3
當然

,你可以這樣做

$args = array('foo', 'bar'); 
if($blah) $args[] = 'baz'; 
call_user_func_array('mail', $args); 

,但我不認爲這是無論如何比你的第一個片段

+0

考慮到郵件()是一個PHP函數; call_user_func_array不會告訴你它期望有效的回調嗎?至少我雖然只能使用用戶定義的函數(正如名字可能暗示的那樣),但我可能錯了? – Yhn

+0

hmm; -edit + snip-是的,doc明確指出它不適用於echo heh。應該確實適用於郵件:) – Yhn

+0

@Yhn'echo'不是函數 – Phil

1

您必須將null傳遞給函數(就我所知,郵件的默認值也是第五個參數)。

所以它會是這樣的:mail($sTo, $sSubject, $sBody, $sHeader, (!$bSafeMode ? $sFifthArgument : null));這應該是允許的。另請參見示例:http://codepad.org/HerLr9O4 :)

正如Phil在下面的評論中提到的那樣;它可能會檢查通過的參數量(我不能在這裏測試,但我期望)。這基本上意味着你堅持if-else;這是完全可讀的(甚至可以更好地記錄!):)。

+0

我有一種感覺,安全模式檢查將使用'argc'來確定內部參數的數量,在這種情況下,通過'null'將會仍然計爲5.需要測試以確保 – Phil

+0

啊,我看到我部分誤讀了這個問題。沒想到$ bSafeMode會連接到php safe_mode配置......在這種情況下,您(不幸)是正確的;那麼if-else結構就沒有別的辦法了。 – Yhn