函数是一段完成指定任务已命名的代码块。函数可以遵照给定的一组值或参数完成指定任务,并且课程返回一个值。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
?>
