php - PHP 是否允许命名参数以便可以在函数调用中省略可选参数?

标签 php default-value optional-parameters named-parameters php-8

在 PHP 中是否可以在调用函数/方法时指定命名的可选参数,跳过您不想指定的参数(如在 python 中)?

类似于:

function foo($a, $b = '', $c = '') {
    // whatever
}


foo("hello", $c="bar"); // we want $b as the default, but specify $c

最佳答案

不,不可能( before PHP 8.0 ):如果要传递第三个参数,则必须传递第二个参数。并且命名参数也是不可能的。


“解决方案”是只使用一个参数,一个数组,并始终传递它……但不要总是定义其中的所有内容。

例如:

function foo($params) {
    var_dump($params);
}

这样调用它:(键/值数组)

foo([
    'a' => 'hello',
]);

foo([
    'a' => 'hello',
    'c' => 'glop',
]);

foo([
    'a' => 'hello',
    'test' => 'another one',
]);

会给你这个输出:

array
  'a' => string 'hello' (length=5)

array
  'a' => string 'hello' (length=5)
  'c' => string 'glop' (length=4)

array
  'a' => string 'hello' (length=5)
  'test' => string 'another one' (length=11)

但我不太喜欢这个解决方案:

  • 您将丢失 phpdoc
  • 您的 IDE 将无法再提供任何提示......这很糟糕

所以我只会在非常特殊的情况下使用它——例如,对于具有大量可选参数的函数......

关于php - PHP 是否允许命名参数以便可以在函数调用中省略可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1342908/

相关文章:

python - 有没有办法在python中强制互斥函数参数?

php - 从多个表中计数并在一个查询中返回所有计数值,速度较慢

php - 如果我想在一个web应用中使用native code来分析,我该怎么办?

php - 如何从 php MongoCursor 返回 JSON 数据

javascript - javascript中类型的默认值

php - 如何根据另一列的值在一列中分配默认值?

c++ - 函数中的默认参数 [C++]

python - 如何定义带有可选参数和参数解包的方法?

php - 使用多对多关系 Laravel/Eloquent/查询构建器时如何从另一个表获取所有书籍

lisp - 在 common lisp 中对可选参数使用 COND