函数

可以通过以下的语法定义函数:

function foo( $arg_1, $arg_2, ..., $arg_n ) {
   echo "Example function.\n";
   return $retval;
}
     

函数中可以使用任何有效的PHP3 代码,甚至是其他的函数或 的定义

返回值

函数可以通过可选的return语句返回值。返回值可以是任何类型,包括列表和对象。

function my_sqrt( $num ) {
   return $num * $num;
}
echo my_sqrt( 4 );   // outputs '16'.
      

函数不能同时返回多个值,但可以通过返回列表的方法来实现:

function foo() {
   return array( 0, 1, 2 );
}
list( $zero, $one, $two ) = foo();
      

参数

外部信息可以通过参数表来传入函数中;参数表就是一系列逗号分隔的变量和/或常量。

PHP3支持通过值形参数(默认), 变量参数,和 默认参数。不支持变长参数表, 但可以用传送数组的方法来实现。

关联参数

默认情况函数参数是传值方式。如果你允许函数修改传入参数的值,你可以使用变量参数。

如果你希望函数的一个形式参数始终是变量参数,你可以在函数定义时给该形式参数加(&)前缀:

function foo( &$bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo( $str );
echo $str;    // outputs 'This is a string, and something extra.'
       

如果要传递一个可变参数给默认的形式参数不是变参方式的函数,你可以在调用函数时给实际参数加(&)前缀:

function foo( $bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo( $str );
echo $str;    // outputs 'This is a string, '
foo( &$str );
echo $str;    // outputs 'This is a string, and something extra.'
       

默认值

函数可以定义 C++ 风格的默认值,如下:

function makecoffee( $type = "cappucino" ) {
   echo "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee( "espresso" );
       

上边这段代码的输出是:

Making a cup of cappucino.
Making a cup of espresso.
      

注意,当使用默认参数时所有有默认值的参数应在无默认值的参数的后边定义;否则,将不会按所想的那样工作。考虑下面程序片段:

function makeyogurt( $type = "acidophilus", $flavour ) {
   return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry" );   // won't work as expected
       

这个例子的输出结果是:

Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
      

现在拿上面的例子来比较以下函数:

function makeyogurt( $flavour, $type = "acidophilus" ) {
   return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt( "raspberry" );   // works as expected
       

本例的输出结果是:

Making a bowl of acidophilus raspberry.