构造函数的最佳方法是什么,参数可以为null?
例如
function newDate($day, $time = null, $overRide) {
Do something with the variables
}
# newDate('12', '', 'yes');
如何简单地重构函数如下:
function newDate($day, $overRide, $time = null) {
Do something with the variables
}
# newDate('12', 'yes');
答案 0 :(得分:5)
实际上,我认为你没有选择。
默认参数应该是函数的最后一个。否则,当您致电newDate(1, 2)
时,PHP会将其转换为newDate(1, 2, null)
,您可能需要newDate(1, null, 2)
。
答案 1 :(得分:2)
最好在函数声明的末尾定义default parameters
。
当在中心有可空或默认参数时,调用看起来像:
newDate($someDay, null, $override);
但是在末尾有默认参数,提供了一个更简单的函数调用:
newDate($someDay, $override); // null is passed for $time
答案 2 :(得分:1)
你所概述的内容(即:在所需的args之后移动可选的args)只有在参数的“流程”仍然有意义时才有意义。 (即:只有当他们不需要按照特定的顺序才有意义时。)但是,它仍然是实现目标的最佳方式。
也就是说,如果可能存在大量可选参数,则可能接受一个可选数组,该数组包含要检查的可选参数的key =>值对。)
(顺便说一下,在你的第一个例子中,你应该真的传递null而不是''。)
答案 3 :(得分:0)
问题不是可以为null的参数。任何参数都可以为null,只需将其传递给函数即可。造成这种困难的原因是默认值。具有默认值的参数必须在最后,因为编译器更容易假设它们之前的任何内容都是固定参数的一部分。
答案 4 :(得分:0)
对于具有许多可选参数的函数,当前的最佳实践是,在撰写本文时,应答者的知识是使用数组伪造命名参数。
function foo($options = array()) {
$options = array_merge(array(
'foo' => 'defaultFoo',
'bar' => 'defaultBar',
'fuz' => false,
'buz' => null,
), $options);
if ($options['fuz']) {
return $options['foo'];
}
return $options['foo'] . $options['bar'] . $options['buz'];
}
这对于第一次写入来说是冗长的,但在使用该函数时非常易读并且乐于扩展。这种方法的有效性通过它在Symfony 1.4框架中的广泛使用以及JQuery与JavaScript对象的平行方式得到证明。
由于array_merge和数组查找,会产生一些开销。