[英]Function argument: default value return of a function?
我有很多帶有可選參數的函數 ,這些參數在省略的值上從指定的函數獲取其默認值,當前我的代碼如下所示:
function get_user($user_id = FALSE) {
// If no ID is passed, get from session
if(!$user_id) {
$user_id = get_id_from_session();
}
// ... do something with the ID
}
它可以正常工作,但是當包含多個可選參數時,它很容易變得笨拙 。 相反,我更喜歡執行以下操作:
function get_user($user_id = get_id_from_session()) {
// ... do something with the ID
}
我敢肯定,您會發現這更方便。 有什么辦法可以做到這一點,或者有人對另一種更清潔的方法有建議嗎?
您可以“縮短”的唯一方法是使用三元運算符 :
$user_id = ( $user_id === false) ? get_id_from_session() : $user_id;
這只是寫作的緊湊版本:
if( $user_id === false) {
$user_id = get_id_from_session();
}
如果您想成為真正的幻想者並且不那么可讀,可以省略中間部分(PHP> 5.3):
$user_id = ( $user_id) ?: get_id_from_session();
現在,如果( $user_id)
計算結果為真,你會得到價值$user_id
在$user_id
,否則你會得到從函數的返回值。
默認函數參數只能采用常量值,不能采用在運行時求值的表達式,因此您的第二個選項將不起作用。
我有一個主意就是這樣。
function foo($user_id = null) {
$data = get_defaults('user_id' => $user_id);
extract($data);
echo $user_id; // should be the value returned from get_defaults()
}
get_defaults()
函數可能如下所示:
function get_defaults(array $params) {
if (isset($params['user_id']) && is_null($params['user_id'])) {
$params['user_id'] = get_id_from_session();
}
if (isset($params['something_else']) && !isValidSomething($params['something_else'])) {
$params['something_else'] = get_something_else();
}
return $params;
}
您只需根據特定的調用函數期望的參數將數組傳遞給get_defaults()
函數。 因此,另一個示例是:
function bar($baz, $user_id = null, $user_name = null, $return = null) {
$data = get_defaults(array('return' => $return,
'user_name' => $user_name,
'user_id' => $user_id));
extract($data);
// normal function code below
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.