PHP函数定义,空参数

时间:2010-02-15 11:47:23

标签: php function

构造函数的最佳方法是什么,参数可以为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');

5 个答案:

答案 0 :(得分:5)

实际上,我认为你没有选择。

默认参数应该是函数的最后一个。否则,当您致电newDate(1, 2)时,PHP会将其转换为newDate(1, 2, null),您可能需要newDate(1, null, 2)

请参阅PHP的documentation on function arguments

答案 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和数组查找,会产生一些开销。