函数是一段完成指定任务已命名的代码块。函数可以遵照给定的一组值或参数完成指定任务,并且课程返回一个值。PHP中有两种函数:自定义函数和系统函数。
1.定义函数 function 函数名称(参数1,参数2,参数3...){ 函数体 [return 返回值] }
<?php function Sum($a, $b = 1){ $c = $a + $b; return $c; } echo Sum(1,3); //输出结果为 4 ?>
函数名是大小写不敏感,不过在调用函数的时候,使用其在定义时相同的形式是个好习惯。
判断函数是否存在 function_exists();参数就是函数名。
2.函数的参数:函数允许使用以下数据类型作为参数默认值:标量、数组和NULL,不能是变量,类成员,或者函数调用等。
2.1 常规参数的函数:实参和形参个数相等、类型一致且顺序一致。 string example(string name, int age, double height)
<?php function Sum($a, $b){ $c = $a + $b; return $c; } echo Sum(2, 4); ?>
2.2 伪类参数的函数:在声明函数时不需要指定类型。 mixed example(mixed $a, number $b, callback $c) 有三种伪类型:mixed number callback
2.3 引用参数的函数:viod funName(array &args) 把数值或变量的内存存储区块的相对地址导入到函数中,当该数值在函数中有任何变动时,会连带对父程序造成影响。注意:如果在函数的形参中使用 & 修饰的参数,在调用此函数时比如传入一个变量给参数,而不能传递一个值。
<?php function demo(&$num){ return $num++; } $i = 10; echo demo($i); //输出结果为 10 echo '<hr>'; echo $i; //输出结果为 11 ?>
2.4 默认参数的函数:如果在调用函数时没有传入参数的值,可以在函数中使用参数的默认值。注意:当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
//正确情况下,含有默认值的参数放在右边。可以保证调用函数只填写必需参数正常输出。 function person($age,$name="xiaofan"){ echo 'name: '. $name; echo 'age: '. $age; } person(12); //输出name: xiaofan age: 12 //如果含默认值的参数放左边,当调用函数传入一个参数时,输出结果就是错误的 function person1($name="xiaofan",$age){ echo 'name: '. $name; echo 'age: '. $age; } person1(12); //输出name: 12 age:
2.5 可变个数参数的函数
function func(){ //获取传入参数的数量 echo func_num_args(); //获取传入的第一个参数 var_dump(func_get_arg(0)); //获取全部的参数,数组形式 var_dump(func_get_args()); } func(a,b,c);
2.6 回调函数:调用函数时将另一个函数作为参数传递到调用函数中。
<?php function one($num){ if($num % 3 == 0){ return TRUE; } return FALSE; } function filter($fun){ for($i = 1; $i < 100; $i++){ if($fun($i)){ continue; } echo $i; echo '<br>'; } } filter("one"); //输入结果是过滤到3的倍数的1到99的值 ?>
3.函数的返回值:值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
4.可变函数:如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
<?php function Sum($a, $b){ $c = $a + $b; return $c; } $foo = 'Sum'; echo $foo(1,2); //输出结果为 3 ?>
5.递归函数:在函数执行中调用它自己。递归函数的好处是精简程序中繁杂重复调用的函数,并且可以执行一些复杂的运算动作。但是它的效率是比较低的。
<?php function myNum($num){ echo $num; echo ' '; if($num == 0){ echo '<=>'; }else{ myNum($num - 1); } echo $num; echo ' '; } myNum(5); //输入结果为 5 4 3 2 1 0 <=>0 1 2 3 4 5 ?>