我可以在php函数定义中定义多少个默认变量?

时间:2013-12-24 17:48:30

标签: php

我在某处读到,当你定义一个函数时,你可以为你可能使用或不使用的变量定义一个默认值,如下所示:

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)调用该函数; ?

3 个答案:

答案 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 questionPHP Functions - Maximum number of arguments),在进入内存限制之前可能有255 555个参数当然这是一个案例,这可能会因可用内存而异。 / p>

该问题还包含another answer,解释了调用函数时会发生什么。了解这一点也可以帮助您更好地决定参数数量。

从编码的角度来看,函数应该具有尽可能少的参数,最多为0,可能只有一个,但应尽可能地防止更多参数。如果您无法减少参数数量,则表示需要查看代码的设计。