函数参数传递的方式有两种:
1 、传值方式。缺省情况下,函数参数通过传值的方式传递,因此即使在函数内部改变参数的值,它并不会改变函数外部参数的值。
2 、传址方式。传址时只需在函数调用时在参数的前面加上“&”号即可。将函数外部的值的内存地址传递给内部的参数,在函数内部的所有操作都会改变函数外部参数的值。所以希望函数修改外部参数的值,必须使用传址传址方式。
-
- <?php
- //定义一个函数
- function f3 ( $a ){
- $a ++;
- }
- $x = 1 ;
- f3 ( $x ) ;
- echo " x= $x " ; //传值方式调用函数
- $x = 1 ;
- f3 ( & $x ) ;
- echo " x= $x " ; //传址方式调用函数
- ?>
- <?php
- function add_some_extra ( & $string )
- {
- $string .= ' and something extra. ' ;
- }
- $str = ' This is a string, ' ;
- add_some_extra ( $str ) ;
- echo $str ; // 输出'This is a string, and something extra.'
- ?>
-
- <?php
- /* 在PHP中,函数不需要在被调用之前定义,在调用后才进行定义也是允许的。
- 在少数情况下,函数在需要一定的判断条件下,才能被定义。这样函数的定义必须在函数被调用之前完成。 */
- $makefoo = true ;
- bar () ; /*你不能调用foo()函数,它在这里不存在。但是能够调用bar(),调用之后在后面进行定义即可。*/
- if ( $makefoo ) {
- function foo ()
- {
- echo " foofoo " ;
- }
- }
- if ( $makefoo ) foo () ; /* 现在我们可以正常调用foo(),因为只有$makefoo为true和定义了foo()函数后,foo()函数才存在。 */
- function bar ()
- {
- echo " barbar " ;
- }
- ?>
- <?php
- function foo ()
- {
- function bar ()
- {
- echo " I don't exist until foo() is called. " ;
- }
- }
- /* 这里不能调用bar(),因为它不存在。 */
- foo () ;
- /* 现在我们可以调用bar(),只有在调用foo()后,bar()才存在。 */
- bar () ;
- ?>
为函数指定默认参数的值
-
- <?php
- function test_defaultargs ( $arg = " default value " ){
- echo " 参数值为: " . $arg . " <br> " ;
- }
- test_defaultargs () ;
- test_defaultargs ( " new value " ) ;
- ?>
- <?php
- function makecoffee ( $type = " cappuccino " )
- {
- return " Making a cup of $type . " ;
- }
- echo makecoffee () ;
- echo makecoffee ( " espresso " ) ;
- ?>
请注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,可能函数将不会按照预期的情况运行。
-
- <?php
- function makeyogurt ( $type = " acidophilus " , $flavour )
- {
- return " Making a bowl of $type $flavour . " ;
- }
- echo makeyogurt ( " raspberry " ) ; // 这个例子将不会按照我们预期的情况运行。
- ?>
- <?php
- function makeyogurt ( $flavour , $type = " acidophilus " )
- {
- return " Making a bowl of $type $flavour . " ;
- }
- echo makeyogurt ( " raspberry " ) ; // 这个例子的输出是:Making a bowl of acidophilus raspberry.
- ?>
函数名可变
-
- <?php
- function f1 (){
- echo " 这是函数f1()。<br> " ;
- }
- function f2 (){
- echo " 这是函数f2()。<br> " ;
- }
- $var1 = " f1 " ;
- $var1 () ; //调用函数f1()
- $var1 = " f2 " ;
- $var1 () ; //调用函数f2()
- //注意:调用可变函数名需要在变量前加$。
- ?>
- <?php
- function foo () {
- echo " foofoo.<br> " ;
- }
- function bar ( $arg = '' ) {
- echo " barbar' $arg '.<br> " ;
- }
- function echoit ( $string )
- {
- echo $string ;
- }
- $func = ' foo ' ;
- $func () ; // 调用foo()
- $func = ' bar ' ;
- $func ( ' test ' ) ; // 调用bar()
- $func = ' echoit ' ;
- $func ( ' test ' ) ; // 调用echoit()
- ?>
函数可变长度参数
-
- <?php
- //向函数传递数组
- function takes_array ( $input )
- {
- echo " $input [0] + $input [1] = " , $input [ 0 ] + $input [ 1 ] ;
- }
- ?>
func_num_args() -- 返回传递给函数的参数的数量
-
- <?php
- function foo ()
- {
- $numargs = func_num_args () ;
- echo " Number of arguments: $numargs .'<br>' " ;
- }
- foo ( 1 , 2 , 3 ) ;
- ?>
func_get_arg() -- 从参数列表中返回一个参数值
-
- <?php
- function foo ()
- {
- $numargs = func_num_args () ;
- echo " Number of arguments: $numargs .'<br>' " ;
- if ( $numargs >= 2 ) {
- echo " Second argument is: " . func_get_arg ( 1 ) . " <br> " ;
- }
- }
- foo ( 1 , 2 , 3 ) ;
- ?>
func_get_args() -- 返回一个包含函数参数的数组
-
- <?php
- function foo ()
- {
- $numargs = func_num_args () ;
- echo " Number of arguments: $numargs .'<br>' " ;
- if ( $numargs >= 2 ) {
- echo " Second argument is: " . func_get_arg ( 1 ) . " <br> " ;
- }
- $arg_list = func_get_args () ;
- for ( $i = 0 ; $i < $numargs ; $i ++ ) {
- echo " Argument $i is: " . $arg_list [ $i ] . " <br> " ;
- }
- }
- foo ( 1 , 2 , 3 ) ;
- ?>