第5章 PHP的函数应用
5.1 函数的定义
- 函数有唯一的名称
- 函数是独立的
- 函数执行特定的任务
- 函数可以将一个返回值返回给调用它的程序
5.2 自定义函数
5.2.1 函数的声明
function 函数名 ([参数1,参数2,...参数n])
{
函数体;
return 返回值;
}
5.2.2 函数的调用
- 通过函数名调用函数
- 如果函数有参数列表,还可以通过函数名后面的圆括号传入对应的值
- 如果函数有返回值,当函数执行完毕会将return后面的值返回到调用函数的位置处
5.2.3 函数的参数
- 参数列表由零个、一个或多个参数组成
- 每个参数是一个表达式,用逗号分隔
- 实参与形参需要按顺序对应传递数据
5.2.4 函数的返回值
- return语句可以向函数调用者返回函数体重任意确定的值
- 将程序控制权返回到调用者的作用域,即退出函数。
- 在函数体中执行了return语句,它后面的语句就不会再执行
5.3 PHP变量的范围
5.3.1 局部变量
- 局部变量也称为内部变量,是在函数内部声明的变量,其作用域仅限于函数内部
5.3.2 全局变量
- 全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾
- 局部变量会覆盖全局变量,因此在函数中无法直接调用全局变量
5.4 声明及应用各种形式的PHP函数
5.4.1 常规参数的函数
string example(string name,int age,double height) //常规参数的函数格式说明
5.4.2 伪类型参数的函数
mixed funName(mixed $args) //在参数列表中出现类型使用mixed描述的参数
mixed funName(number $args) //在参数列表中出现类型使用number描述的参数
5.4.3 引用参数的函数
void funName(array &args) //在参数列表中出现使用&描述的参数
5.4.4 默认参数的函数
函数支持为参数指定一个默认值,在调用函数时如果没有指定参数的值,在函数中会使用参数的默认值。默认值必须是常量表达式
mixed funName(string name [,string value [,int expire]])
5.4.5 可变个数参数的函数
默认参数适合实参个数少于形参的情况,而可变参数列表则适合实参个数多于形参的情况。如果在函数中使用不到多传入的参数则没有意义。
<?php
/**
声明一个函数more_args(),用于打印参数列表的值
虽然没有声明参数列表,但可以传入任意个数,任意类型的参数值
**/
function more_args(){
$args = func_get_args(); //将所有传递给脚本函数的参数当做一个数组返回
for($i=0;$i<count($args);$i++){
echo "第".$i."个参数是".$args[$i]."<br>";
}
}
more_args("one","two","three",1,2,3);
5.4.6 回调函数
回调函数格式如下所示:
mixed funName(callback arg) //在参数列表中使用伪类型callback描述
1.变量函数
变量函数也称为可变函数,如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行它。
<?php
function one($a,$b){
return $a+$b;
}
$result = "one";
$result(2,3); //将调用one函数,返回5
2.使用变量函数声明和应用回调函数
如果要自定义一个可以回调的函数,可以选择使用变量函数帮助实现。在定义回调函数时,函数的声明结构是没有变化的,只是声明的参数是一个普通变量即可。但在函数的内部应用这个参数变量是,如果加上圆括号,就可以调用到和这个参数值同名的函数了。
<?php
function filter($fun){
for($i=0;$i<100;$i++){
//将参数变量fun加上一个圆括号,则为调用和变量$fun值同名的函数
if($fun(i))
continue;
}
}
function one($num){
return $num%3 == 0;
}
filter("one");
5.5 使用自定义函数库
- 通常将多个自定义的函数组织到同一个文件或多个文件中,这些手机函数定义的文件就是创建的PHP函数库
- 要使用这些定义的函数,就需要使用include(),include_once(),requie()或require_once()中的一个函数,将函数库文件载入到脚本程序中
- requiece()和include()是语言结构,不是真正的函数
- requiece()和include()性能相类似,不同之处在于include()在执行文件时每次都要进行读取和评估;而require()语句,则只对文件处理一次(实际上,文件内容替换了require()语句)
- include_once()和requirce_once()语句也是在脚本执行期间包括并允许指定文件,与 requiece()和include()类似,使用方法相同。唯一区别是如果该文件的代码已经被包括了,则不会再次包括