2010-02-15 31 views
2

构造函数的最佳方式是什么?函数的参数可以为null?PHP函数定义,空参数

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'); 

回答

2

它更好地界定default parameters在函数声明的末尾..

在中央具有可为空或默认参数时

,呼吁看起来像:

newDate($someDay, null, $override); 

但在末端默认参数,提供了一个简单的函数调用:在时间

newDate($someDay, $override); // null is passed for $time 
+2

这不是风格问题,而是语言支持问题。 PHP仅支持参数列表末尾的可选参数。 – pgb 2010-02-15 18:18:17

0

的问题不是参数可以为空。任何参数都可以为null,只需将它传递给函数即可。这里造成困难的原因是默认值。带有缺省值的参数必须在最后,因为编译器更简单地假定它们之前的任何内容都是固定参数的一部分。

5

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

默认参数应该是你函数中的最后一个参数。否则,当您拨打newDate(1, 2)时,PHP会将其变为newDate(1, 2, null),您可能需要newDate(1, null, 2)

查看PHP的documentation on function arguments

1

你所概述的(即:在所需要的参数之后移动可选的参数)只有在参数的'流'仍然有意义时才有意义。 (即:只有当他们不需要按照特定的顺序才有意义)。但是,它仍然是实现目标的最佳方式。

这就是说,如果有可能大量的可选参数,它可能是一个想法,接受一个可选的阵列,其将包含可选ARGS的关键=>值对来检查。)

(顺便说一下,在你的第一个例子,你真的应该传递null而不是“”)。

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和数组查找,有一些开销。