Как проверить, установлено ли PHP значение параметра функции путем вызова функции или значения по умолчанию - PullRequest
0 голосов
/ 02 мая 2020

Я хочу проверить, установлено ли PHP значение параметра функции путем вызова функции или его значение по умолчанию

function our_round($value,$decimal=6){
   if($decimal == 6 && $value < 0){
     $decimal = 9; // default
   }

   if($decimal == 6 && && value < 0 && provided by calling function){
     // need this logic to code here.
     // keep 6 if 6 provided by provider
     $decimal  = 6;
   }

   return round($value,$decimal);
}

// calling
our_round(1.1234567); // decimal default value
our_round(1.1234567,2); // decimal value provided 
our_round(1.1234567,6); // decimal value provided 

При вызове функции передайте 6 в десятичном виде, я хочу проверить, по умолчанию это или предоставлено? сделать логи c.

1 Ответ

1 голос
/ 02 мая 2020

Вы можете проверить, какие значения были предоставлены, используя func_get_args(). Однако я должен согласиться с комментариями о том, что такой подход не имеет смысла.

function func($a = 2) {
    var_dump($a, func_get_args());
}
func();

func_get_args() возвращает только те аргументы, которые были переданы при вызове функции, но не установлены значениями по умолчанию.

В вашем случае было бы более целесообразно сделать второй параметр обнуляемым, а затем иметь комплексные логические значения c внутри тела функции.

function our_round(float $value, ?int $decimal = null) {
    if (null === $decimal && $value < 0) {
        $decimal = 9; // default
    } else {
        // need this logic to code here.
        // keep 6 if 6 provided by provider
        $decimal = 6;
    }

    return round($value, $decimal);
}

Я бы порекомендовал взять лист бумаги и дроу какая-то таблица правды возможных вариантов. Если вы просто хотите назначить значение по умолчанию простым способом, вы можете использовать троичный оператор.

function our_round(float $value, ?int $decimal = null) {
    // assign default value
    $decimal ??= $value < 0 ? 9 : 6;

    return round($value, $decimal);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...