我用户定义了许多函数,其中一些有六个、十个甚至更多参数。当我忘记函数的参数是什么或它们的输入顺序时,阅读我的代码会变得很困难。我设计了一种方法来处理这个问题,用单个数组替换所有参数,并使用数组键作为标签每个论点。因此,例如,而不是
function MyFunction(string $sSayThis, int $nRepeatTimes, bool $bLoud = $false) {...}
我现在有
function MyFunction(array $args)
{$sSayThis = $args['sSayThis']); CheckType($sSayThis, 'string');
$nRepeatTimes = $args['nRepeatTimes']); CheckType($nRepeatTimes, 'int');
$bLoud = (IsSet($args['bLoud']) ? $args['bLoud'] : false); CheckType($bLoud, 'bool');
...
}
调用此函数,而不是
MyFunction('Hello', 3, true);
现在看起来像
MyFunction(array('sSayThis' => 'Hello', 'nRepeatTimes' => 3, 'bLoud' => true));
当只有三个参数时,这几乎没有必要,如本例所示,但在阅读具有六个或十个参数的函数的代码时,它可能非常有用!此外,如果我只需要为第十个参数传递一个值并在此之前为所有可选参数使用默认值,我可以在调用中省略那些其他参数,而不是为它们传递一系列参数, ''
。
这是一个hack,看起来有点丑。但它确实有助于使我的代码自我记录并且更易于阅读。
我知道有些 IDE 会给我参数提示,但我使用的是 Notepad++,它没有这样做。
这个想法在去年提出的一个类似问题中讨论过,PHP Function Arguments - Use an array or not? ,但该问题并未显示函数调用的外观,这是问题中最重要的部分。一些人在回答这个问题时说,一个函数永远不需要十个参数,而有这么多参数则表明设计不佳。我理解这种担忧,但有时算法只需要大量信息。
这种方法有什么问题,还是有更好的方法来自我记录这些函数调用?