php学习第六课函数
函数就是一个功能,封装好的功能!
Function demo(){
}
函数的学习流程
- 学习函数的定义☆
- 学习如何自定义函数☆☆☆☆☆
- 了解函数的参数☆☆☆☆☆
- 了解return的作用☆☆☆☆☆
- 学习函数的变量作用域☆☆☆
- 特殊的函数类型
- 变量函数☆☆
- 回调函数☆☆
- 递归函数☆☆☆☆☆
- 内部函数☆
- 闭包函数☆☆☆
- 文件的包含☆☆☆☆☆
- 学习函数
a) 函数的分类
- 根据是否是系统自带:系统函数和自定函数
- 根据是否具有返回值:带返回值得函数和执行过程的函数
- 根据结构不同
- 一般函数
- 变量函数
- 回调函数
- 内部函数
- 递归函数
- 闭包函数
- 自定义函数的语法结构
a) 基本格式
b) Function 函数名(){
PHP语句
(函数体)
}
- 函数的姓就是function 不能省略
- 函数名(有姓,也有名,)
a) 函数名的定义方式
- 可以是英文,不可是使用中文
- 可以使用数字,单是不能用数字开头
- 不能使用特殊字符,_ 除外
- 函数声明要有意义
- 函数名不区分大小写
- 不可以跟已经存在的函数(系统和自定义)重名
- 函数的特征
a) 函数定义之后,不调用不执行(就跟一只小狗一样)
b) 函数调用不分先后,因为PHP解析器在执行页面代码之前就已经预先加载了函数部分的内容
Return语句的作用
具有return 的函数就是有返回值得函数
没有return 的函数就称之为执行过程函数
作用1
如果函数中存在return 并且执行了该return 语句,那么该函数执行的结构就可以被变量接受
作用2:
如果函数的执行过程中执行了return语句,那么后续的代码都不在执行
一个函数中可以有N个RUTURN. 但是只能执行一个。
注意:一个函数中可以有多个return语句,但是程序只能执行一条,一般多个return语句都是使用分支结构分开存放。
Echo 与 return 的区别:
Echo 直接输出,拿不到结果。
Return 可以返回结果,赋值给变量后在输出。
- 函数的参数
a) 参数分为形参和实参两部分
- 形参就是形式上的参数,在定义函数的括号中使用
- 实参就是实际上的参数,在调用函数的括号中使用
注意:1.如果函数有定义形参,那么调用函数时需要传入对应实参
- 如果函数同时具备形参的默认值,并且传入了实参,那么传进来的值以实参为主。
- 如果要传入实参,必须和形参的位置一一对应
- 如果形参中具有多个形参有默认值,将最有可能传入的形参放入前面,
- 如果函数同时具有默认值的形参和没有默认值得形参,那么没有默认值的形参一定要放到默认值得形参前
- 注意:传入的参数一定要和形参对应,免得出现逻辑问题,(位置一一对应)
- 函数的变量作用域(就是函数相关的变量的作用范围)
a) 局部变量
在函数中定义的变量就是局部变量,起作用范围仅限函数内部
在函数外部声明的变量,其作用范围就是当前页面部分,函数内部无法使用。
在函数内部或是函数的形参里面声明变量,也是局部变量。
b) 全局变量
- 在函数的内部和外部都可以访问和使用的变量就是全局变量
实现全局变量的方法1
在函数外部具有一个变量
在函数内部也具有一个同名变量
在函数内部的同名变量前使用global关键字既可以实现全局变量
注意:global声明全局变量时禁止赋值
如果一个变量在函数内部已经赋值,之后使用global进行全局
声明,结果是该变量的值变为函数外部变量的值
注意:global在函数内部声明变量时,变量赋值要在global下方
实现全局变量的方法2
在函数内部可以使用$GLOBALS[变量名]的方式直接调用函数外部的变量值,此时函数内部都可以使用。实现了一种方式的全局变量
静态变量
在函数内部使用static声明的变量就是静态变量
静态变量特征
静态变量只会被初始化一次
静态变量在函数运行结束后不会被回收
静态变量一般用于计算函数调用次数
变量引用:(引用传参)(重点)
在设定函数形参时,如果在形参变量之间增加了&符号,就表示实参传递时要引用传参的方式(变量引用赋值)的方式将实参的值传递给形参
此时如果使用引用传参,那么函数内部的引用传参的形参值发生改变,对应的外部实参变量的值也发生改变。效果类似于全局变量。
变量函数
当一个变量的值是某个函数的名称字符串时,我们可以使用
变量()的方式调用,对应名称的函数,这种调用方式就是变量函数。
回调函数
回调函数只是变量函数的一个变形,本质上还是变量函数的应用。
在一个函数(A函数)中,通过变量函数的方式($val())调用另外一个函数(B函数,C函数),而其函数名通过A函数的参数传进来的,这种方式就是回调函数,应为函数A中的变量函数($val())会根据用户传入不同的实参回过头来调用不同的名称的其他函数
格式:function A($var){
$var();//回调函数要素1,变量函数
//A();
//B();
}
A(‘B’)//回调函数要素2.传入函数名称字符串
A(‘C’)
内部函数:
什么是内部函数:在函数的内部声明的函数,就是内部函数
- 在函数外部是否可以调用内部函数:
不可以直接调用,但是如果调用外部函数之后,就可以任意调用内部函数。
- 在函数内部是否可以调用内部函数
可以调用,但是必须在内部函数定义之后调用
递归函数
在一个函数中调用当前函数本身,这种函数格式就是递归
(能懂就懂,不懂拉倒。)
文件系统 对目录的所有操作 都会使用到递归
匿名函数
没有名字的函数就是匿名函数
如果声明一个函数,而该函数没有函数名,那么这个函数就是匿名函数
用法1:用变量接受匿名函数
变量名=function(){
函数体;
};(注意这里必须有分号结束)
匿名函数的调用方式 类似于变量函数
调用:变量名();
闭包函数:
在子函数内部使用父函数的变量,这种方式就是闭包。
格式:function 父函数(){
$var=值;//父函数的局部变量
//声明匿名函数并且使用USE格式实现闭包
$变量=function() use ($var){
//子函数代码
}
}
匿名回调函数
回调函数的区别:
- 以字符串方式传入的回调函数
- 以匿名函数方式传入的回调函数
- 字符串方式传入回调函数,该函数可以使用多次,任意调用,应这是预先加载的普通函数,匿名函数方式传入的回调函数,只可以在当前回调函数中使用,其他地方无法使用。
- 匿名函数的回调函数方式效率高,回到函数运行完毕,匿名函数即被收回。而字符串传入的函数由于是预先加载的普通函数,所以在页面没有执行完毕时,是不会消失的。
可变长度参数列表(了解很好用)
在函数中,实参的实际传入个数允许超过形参的个数,在此情况下如果想获取所有传入的实参,可以使用函数func_get_args()来获取所有实参组成的数组。在函数内部进行其他的操作
注意:func_get_args()尽在函数内部使用。
文件的包含:
Include 文件包含
作用:相当于将文件的内容复制到指定的文件当中
常用于包含数据或者是配置文件,但是任何PHP文件都可以包含
Include_once 单次文件的包含
作用:相当于将文件的内容复制到指定的文件中,但是如果文件已经存在,将不再包含,不再包含返回true值
Include和inlcude_once的区别:
- include包含文件可以包含n次, 二include _once只能包含一次
- 。Include的效率略高于include_once,因为include_once需要判断
- Inlcude 包含文件成功返回整形,但是include_once第一次包含返回的是整形1,以后包含相同文件时返回时true。
Include和require 的区别:
Include 包含文件如果失败,提示warning级的错误
Require 包含文件如果失败,提示ERROR级的错误
Include包含文件失败,后续代码继续执行
Require 包含文件失败,后续代码将不再执行。
Require_once
作用:相当于用require的方式,仅包含一次文件,功能类似于include_once,都是只包含一次
Require和require_once的区别相当于include和inlcude_once的区别。