一尘不染

命名的PHP可选参数?

php

在PHP 4/5中是否可以在调用时指定一个命名的可选参数,从而跳过您不想指定的参数(例如在python中)?

就像是:

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


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

谢谢


阅读 252

收藏
2020-05-29

共1个答案

一尘不染

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

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

例如 :

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

并这样称呼:

foo(array(
    'a' => 'hello',
));

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

foo(array(
    '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将不再能够提供任何提示…这很糟糕

所以我只在非常特殊的情况下才这样做-例如,对于具有很多选项参数的函数…

2020-05-29