函数是可以在程序中重复使用的语句块,PHP中提供了超过1000个内建的函数,也可创建自己的函数。
自定义函数声明以关单 "function" 开头。
自定义函数名以字母或下划线打头,后面跟字母,数字或下划线。
自定义函数只有在被调用时才会执行
自定义函数名对大小写不敏感
function 函数名(参数1, 参数2, /* ..., */ 参数N) { 要执行的代码; } |
<?php function myfunction() { echo "张三"; } echo "我的名字是"; myfunction();// 调用函数 ?>
我的名字是张三
PHP 还允许使用数组 array 和特殊类型 NULL 作为默认参数。
<?php function myfunction($fname) { echo "$fname 姓张<br>";//一个参数 } function mycanshu($name,$sex="未知") { echo $name."性别是".$sex."<br>";//使用两个参数 } function myarray($arr) { echo $arr[0]."性别是".$arr[1]."<br>";//使用数组 } myfunction("张三"); mycanshu("李四"); //这里缺少第二参数则使用默认参数 mycanshu("陈五","男"); //这不使用默认参数 myarray(array("李六","女")); ?>
张三 姓张
李四性别是未知
陈五性别是男
李六性别是女
函数无需在调用之前被定义,除非是下面两个例子中函数是有条件被定义时
<?php header("content-type:text/html;charset=utf-8"); //设置编码 $condition = true; /* 不能在此处调用fun()函数, 因为它还不存在,但可以调用bar()函数。*/ bar();//这是一般调用 if ($condition) { function fun() { echo "在程序执行到达我之前我是不存在的</br>"; } } /* 现在可以调用函数 fun()了, 因为 $condition 值为真 */ if ($condition) fun(); function bar() { echo "我在程序执行时就存在了</br>"; } bar();//这是一般调用 ?>
我在程序执行时就存在了
在程序执行到达我之前我是不存在的
我在程序执行时就存在了
如果省略了 return,则返回值为 NULL。函数不能返回多个值,但可以通过返回一个数组来得到类似的效果,可以返回包括数组和对象的任意类型。
<?php function nums() { return array (1, 2, 3); } var_dump(nums()); ?>
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
改变函数是通过改变函数的值从而改变要调用的函数,PHP 将寻找与变量的值同名的函数,方法是变量名后有圆括号,方法、属性、常量义可改变。
可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。
<?php header("content-type:text/html;charset=utf-8"); //设置编码 function funone() { echo "我是funone()<br />\n"; } function funtwo($cs = '') { echo "我是funtwo(); 参数是'$cs'.<br />\n"; } // 使用 echo 的包装函数 function funthree($cs) { echo $cs; } $funone = 'funone'; $funone(); //调用funone() $funtwo = 'funtwo'; $funtwo('canshu'); //调用funtwo() $funthree = 'funthree'; $funthree('canshu'); //调用funthree() ?>
我是funone()
我是funtwo(); 参数是'canshu'.
canshu
PHP从 5.3 开始支持匿名函数,直接function加圆括号赋值给变量
$变量名 = function(参数){ 要执行代码; }; |
<?php $fun = function($arg){ echo $arg; };//注意匿名函数必须以;结尾。 var_dump($fun); echo '<br>'; $fun('我是匿名函数!'); ?>
object(Closure)#1 (1) {
["parameter"]=>
array(1) {
["$arg"]=>
string(10) "
我是匿名函数!