第十九课:自定义函数
函数功能强大,使用简单,我们只要按它的要求输入参数,它就能返回我们想要的结果。PHP中还能自定义函数,把那些在编程时要反复用到的功能块定义成一个函数,然后简单的调用。 例如,我们经常要在网页里显示时间,而且时间格式各不一样,那么怎么把它定义成一个函数呢?又怎么调用呢?请看下面的代码19-1: <? php // 调用方法一 echo myDate( 4 ); // 调用方法二 $a = 1 ; echo myDate( $a ); // 调用方法三 $b = 6 ; $dateStr = myDate( $b ); echo $dateStr ; // 定义函数 function myDate( $style ){ switch ( $style ){ case 1 : $str = date ( " Y年m月d日 " ); break ; case 2 : $str = date ( " Y-m-d " ); break ; case 3 : $str = date ( " m/d/Y " ); break ; case 4 : $str = date ( " y.m.d l " ); break ; case 5 : $str = date ( " M d Y " ); break ; case 6 : $str = date ( " Y年第W周 " ); break ; default : break ; } return $str ;} // 定义函数结束 ?> 上面的代码中,我们定义了一个函数 myDate(),定义函数要由关键字 function 来声明,函数名是非大小写敏感的, $style是要输入日期样式的参数,函数内部就是实现特定功能的PHP代码,函数可以通过可选的 return语句返回需要的值。函数定义之后,你可以象上例那样,在你需要的地方简单的调用。 参数 外部信息可以通过参数传递给函数中,参数就是一系列 逗号分隔的变量或常量。PHP支持 数值形参数, 变量参数和 默认参数。看一个默认参数使用的例子19-2: <? php echo myDate(); function myDate( $style = 1 ){ switch ( $style ){ case 1 : $str = date ( " Y年m月d日 " ); break ; case 2 : $str = date ( " Y-m-d " ); break ; case 3 : $str = date ( " m/d/Y " ); break ; case 4 : $str = date ( " y.m.d l " ); break ; case 5 : $str = date ( " M d Y " ); break ; case 6 : $str = date ( " Y年第W周 " ); break ; default : break ; } return $str ;} ?> 上面的例子中,语句 echo myDate()并没有输入参数,但程序还是正确运行了,为什么呢?这是因为我们在定义函数时使用了默认参数 $style=1,即在没有参数输入的情况下,函数就使用这个默认值。当有多个参数传递时,默认参数要写在最后。例如19-3: <? php function add( $a , $b , $c = 9 ){ $value = $a * $b + $c ; return $value ; } echo add( 18 , 25 ); ?> 返回值 函数可以通过可选的 return语句来返回需要任何类型的值,这导致函数立即结束它的运行,并且将控制权传递回它被调用的行。例如19-4: <? php function square( $num ){ return $num * $num ;} echo square( 4 ); // 输出 '16'. ?> 函数不能同时返回多个值,但可以通过数组的方法来返回。例如19-5: <? php function small_numbers(){ return array ( 0 , 1 , 2 );} list ( $zero , $one , $two ) = small_numbers(); ?> 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 & :例如19-6: <? php function & returns_reference(){ return $someref ;} $newref =& returns_reference(); ?> 函数与变量作用域 函数是一个封闭好的模块,它接受的是形式参数,在调用函数过程中,函数外部的变量不能影响到函数内部,函数内部声明的变量同样不能影响到函数外部的领域。而且函数内部的变量在一般情况下会随函数调用结束而消失。因此,如果你想让外部的变量作用到函数内部,或者函数内部的变量能够在函数调用结束后继续保存,这就要使用关键字 global声明。例如19-7: <? php $a = 5 ; $b = 8 ; function add( $c ){ global $a , $b ; // 用global声明全局变量$a,$b,否则函数无法获得你想要的值。 return $a + $b - $c ; } echo add( 9 ); ?> 无论是把外部变量作用到内部还是把内部变量作用到外部,都是一种不好的编程思想,这很容易引起错误。所以,关键字 global最好少用。千万不要贪一时方便而多用。 好了,你学会定义函数了吗?下面我又要出一道作业题了:做网页时经常要输出各种大小和颜色的文字,我不想每当用它的时候去重复写这些代码,你能帮我写个函数吗?只要输入字号,颜色和文字,它就能显示我想要的效果。