我在某处读到,当你定义一个函数时,你可以为你可能使用或不使用的变量定义一个默认值,如下所示:
function test( $a, $b, $c=0 ) {
if ( $c != 0 )
echo 'a + b + c = '.( $a + $b + $c);
else
echo 'a + b = '.( $a + $b );
}
我想知道在定义函数时我可以添加多少个具有默认值的变量。它只是一个吗?或者我可以定义多个但没有得到“函数期望X变量被传递”的错误类型? 换句话说,我可以这样做吗?
function test( $a, $b, $c=0, $d=1, $e=2 ) {
if ( $c != 0 )
echo 'a + b + c = '.( $a + $b + $c);
else
echo 'a + b = '.( $a + $b );
}
并且仅用test(4,9)调用该函数; ?
答案 0 :(得分:1)
您可以根据需要定义任意数量的可选参数,PHP提供此代替method overloading,就像您在Java或C#中看到的那样。
确保在可选参数之后不放置任何非可选参数。这似乎是常识,但我看到人们感到困惑,因为他们在尝试这样做时会收到警告或错误:
的无效:强> 的
function myFunction($a = 1, $b = 2, $c, $d = null)
在上述情况下,$c
需要成为第一个参数。
答案 1 :(得分:1)
这是OVER LOADING的功能之一,以下示例将澄清您的疑问,
class argument_class
{
function mymethod($arg1 = null, $arg2 = null, $arg3 = null)
{
if( $arg1 == null && $arg2 == null && $arg3 == null ){
return 'function has got zero parameters <br />';
}
else{
$str = '';
if( $arg1 != null )
$str .= "arg1 = ".$arg1." <br />";
if( $arg2 != null )
$str .= "arg2 = ".$arg2." <br />";
if( $arg3 != null )
$str .= "arg3 = ".$arg3." <br />";
return $str;
}
}
}
$obj = new argument_class;
echo '<br />$obj->mymethod()<br />';
echo $obj->mymethod();
echo '<br />$obj->mymethod(null,"argument_2") <br />';
echo $obj->mymethod(null,'argument');
echo '<br /> $obj->mymethod("argument_1","argument_2","argument_3")<br />';
echo $obj->mymethod('argument_1','argument_2','argument_2');
答案 2 :(得分:1)
您询问具有默认值的函数参数。 PHP不会在此处应用限制,它仅限于可用内存。
正如我展示in an answer to a related question(PHP Functions - Maximum number of arguments),在进入内存限制之前可能有255 555个参数当然这是一个案例,这可能会因可用内存而异。 / p>
该问题还包含another answer,解释了调用函数时会发生什么。了解这一点也可以帮助您更好地决定参数数量。
从编码的角度来看,函数应该具有尽可能少的参数,最多为0,可能只有一个,但应尽可能地防止更多参数。如果您无法减少参数数量,则表示需要查看代码的设计。