PHP - php中的数组
1. 什么是函数
说明: 把一段具有某个功能的代码进行封装,在需要的地方进行调用。
2. 函数的分类
- 根据是否是系统自带,函数可以分为系统函数和自定义函数
- 自定义函数的函数名的目的是给当前功能起一个可以调用的名称。
- 系统自带的函数是系统函数。
- 根据是否具有返回值分为:带返回值的函数和执行过程函数。
- 根据函数结构的不同,分为:
- 一般函数
- 变量函数
- 回调函数
- 内部函数
- 递归函数
- 闭包函数
3. 函数的定义以及自定义函数
// 自定义函数
function 函数名([形式参数列表]){
// 有具体功能的代码块;函数体;
// [return 返回值];
}
//函数的调用
函数名([实际参数列表]);
- function 不能省略。
- 函数的调用: 直接使用函数名就可以调用当前函数。函数名([实际参数]);
- 函数名的命名规则:
- 函数名由字母数字下划线组成,数字不能开头。
- 函数名不区分大小写。
- 同一作用域中,函数名不接重复。
- 函数名要有意义。
- 函数的特性:
- 函数定义好后,不调用不执行。
- 函数可以在定义之前调用(变量提升)。
4. return有的作用
- 具有return语句的函数就是有返回值的函数。
- 返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
- 如果省略了 return,则返回值为 null。
- 如果函数中存在return语句,并且执行了该return语句,return后面的数据将可以被变量接收,继续做运算或者其他操作。
- 如果函数的执行过程中执行了rerun语句,那么后续代码不再执行。
- 一个函数中可以有多个return,但是程序只能执行一个,一般多个return语句都是使用在分支结构分开存放的。
- 没有return语句的函数就是执行过程函数。
- 执行过程函数只能执行一遍过程,不能再做其他操作。
5. 函数的参数
- 形式参数:形式上的参数,定义函数时使用。
- 实际参数:调用函数时传递给函数的实际数据就是实参。
- 每个参数就是变量,多个参数用逗号隔开。
- 函数如果定义了形参,且形参没有默认值时,调用时必须传入一一对应的实参。
6. 函数的变量作用域
函数变量的作用域,就是指函数的相关变量的作用域范围。
- 局部变量:
- 在函数中定义的变量就是局部变量,其作用范围仅限函数的内部。
- 形参也是函数内部的变量,也是局部变量。
- 全局变量
- 普通变量
- 在函数外部声明的变量,其作用范围就是当前页面,函数内部无法使用。
- 全局变量
- 在函数内部和外部都可以访问和使用的变量就是全局变量。
- 实现全局变量的方法1: global关键字
- 在函数外部有一个变量
- 在函数内部也有一个同名变量
- 在函数内部的同名变量前使用global 关键字修饰,即可以实现全局变量。
- 注意: global 声明全局变量时禁止赋值。
- 实现全局变量的方法2:
$GLOBALS
- 在函数内部可以使用 $GLOBALS[ 变量名]的方式直接调用函数外部的变量值。此时函数内外部都可以使用该变量,实现了另一种方式的全局变量。
- 普通变量
7. 静态变量
在函数内部使用static声明的变量就是静态变量。
静态变量特征:
- 静态变量只会被初始化一次。
- 静态变量在函数运行结束后不会被回收。
- 静态变量一般用于计算函数调用次数。
8. 引用传参
- 函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。
- 如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &。
变量函数
- 当一个变量的值是某个函数的名称字符串时,可以使用变量名()的方式调用函数,这种调用方式就是变量函数。
$ysf = 'jia';
function jia($x, $y){
return $x + $y;
};
$ysf(3,5);// 8
回调函数
- 回调函数只是变量函数的一种变量,本质还是变量函数的应用。
- 在一个函数A中,通过变量函数的方式$var()调用另外一个函数(B,C),而其函数的名称通过A函数的参数传递进来, 这种方式就是回调函数。因为函数A中的变量函数$var()会根据用户传入不同的的实参,然后调用不同名称的其他函数。
function A($var){
$var();//变量函数
};
a('b');//在a函数中,调用回调函数b
- 回调函数要素1, 变量函数。
- 回调函数要素2, 传入函数名称字符串。
匿名回调
匿名回调格式:调用函数(传入匿名函数)
回调函数的区别:
- 以字符串方式传入的回调函数
- 以匿名函数方式传入的回调函数
- 以字符串方式传入的回调函数可以使用多次,任意调用,因为是预先加载的普通函数。
- 以匿名方式传入的回调函数只可以在当前回调函数中使用,其他地方无法使用。
- 以字符串方式传入的函数由于是预先加载的普通函数,所以页面没有执行完毕时,永不消失。
- 以匿名函数方式传入的回调函数效率高,因为回调函数运行完毕,匿名函数即被收回;
文件的包含:
include 文件包含
- 作用:相当于将文件的内容复制到执行的文件当中。常用于包含数据库或者配置文件等,但是任何的PHP文件都可以包含。
- 包含格式
- 指令格式:
include './ dog.php'
- 函数调用:
include ( './ dog.php')
- 指令格式:
- 返回值: int 1。
include_once 单次的文件包含
- 作用:相当于将文件的内容复制到执行的文件当中。但是如果文件已经包含过,将不再包含,返回true。
- 包含格式
- 指令格式:
include_once './ dog.php'
- 函数调用:
include_once ( './ dog.php')
- 指令格式:
- 返回值: 第一次包含返回1,以后包含相同文件返回true。
require 文件包含
- 请求,需要,作用和include几乎相同, 将一个文件请求到另一个文件中。
- 包含格式
- 指令格式:
require './ dog.php'
- 函数调用:
require ( './ dog.php')
- 指令格式:
- 返回值:int 1。
require_once 单次的文件包含
- 作用相当于require的方式,仅包含一次,功能类似于include_once 都是一次包含。
- require 和 require_once 的区别相当于 include 和 include_once 的区别。
-
- 包含格式
- 指令格式:
require_once './ dog.php'
- 函数调用:
require_once ( './ dog.php')
- 指令格式:
- 包含格式
- 返回值: 第一次包含返回1,以后包含相同文件返回true。
include VS include_once
- include包含文件可以包含多次,而include_once只能包含一次。
- include效率略高于include_once,因为include_once需要判断。
- include包含文件成功时返回数值整型1。
- include_once第一次包含返回1,以后包含相同文件返回true。
include VS require
- include 包含文件失败,提示 waring 级别错误,后续代码继续执行。
- require包含文件失败,则提示 error 级别错误,后续代码不再执行。