簡體   English   中英

函數參數:函數的默認值返回?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM