函数的概述
函数的了解与学习
Ø 通俗的理解函数就是一个功能。
Ø 学习函数需要学习三点:
函数的作用
函数的参数
函数的
函数的分类
Ø 根据是否是系统自带的:系统函数和自定义函数
Ø 根据是否具有返回值:带返回值函数和执行过程函数
Ø 根据函数内部结构不同分为:
一般函数
变量函数
回调函数
内部函数
递归函数
匿名函数
匿名回调函数
函数的定义方式
函数的定义格式
Ø 基本格式:
function 函数名(){
PHP语句(函数体)
}
Ø 函数的命名问题:
函数的姓就是function 不能省略
可以使用英文,不允许使用中文
可以使用数字,但是数字不能开头
不能使用特殊字符,_除外
函数声明要有意义
函数名不区分大小写。
不可以和已经存在(系统函数 和自定义)的函数重名
Ø 函数的特征:
函数定义之后,不调用不执行
函数调不分先后,因为PHP解析器在执行页面代码之前就已经预先加载了函数的部分的内容
return语句的作用
Ø 具有return的函数就是有返回值的函数
Ø 没有return的函数就称之为执行过程函数
u 作用1:
如果函数中存在return并且执行return语句,那么该函数的执行结果就可以被变量接收。
u 作用2:
如果函数的执行过程中执行了return语句,那么后续的代码不在执行。
注意:一个函数中可以有多个return语句,但是程序只能执行一条,一般多个return语句都是使用分支结构分开存放
return和echo的区别
如果需要使用函数执行的结果,那么在该函数中就需要加return语句,
如果不需要函数的运行结果,只是需要函数执行一次,那么在该函数中可以选择不加return语句。
echo 只是执行没有实质性的东西
return 有实质性的东西
函数的参数
Ø 参数分为形参和实参两个部分
形参就是形式上的参数,在定义函数的括号中使用。
实参就是实际上的参数,在调用函数的括号中使用。
Ø 注意:
如果函数有定义形参,那么调用函数时需要传入对应的实参(形参没有默认赋值)
如果函数同时具有形参的默认值,并且传入了实参,那么传进来的值以实参值为主(相当于变量赋值,用实参的值覆盖了形参)
如果要传入实参,必须和形参的位置一一对应
如果形参中具有多个形参有默认值,将最有可能传入实参的形参放在前面
如果函数同时具有默认值的形参和没有默认值的形参,那么没有默认值的形参一定要放到有默认值的形参前。
传入的参数一定要和形参对应,免得出现逻辑问题
引用传参
引用传参就是变量的引用,内部发生变化,外部也发生变化。
Ø 在设定函数形参时,如果在形参变量之前添加&符号,就表示实参传递时要以引用传递的方式(变量引用赋值)将实参的值传递给形参
Ø 如果使用引用传参,那么函数内部的引用传参的形参值发改变,对应的外部实参变量的值也会发生改变,效果类似于全局变量(但不是全局变量)
静态变量
Ø 在函数内部使用static声明的变量就是静态变量。
Ø 静态变量的特征:
u 静态变量只会被初始化一次(无论你调用多次函数都只会初始化一次)
u 静态变量在函数运行结束后不会被回收
u 静态变量一般用于计算函数调用次数
函数的变量作用域
函数的变量作用域就是函数相关的变量的作用范围。
局部变量
Ø 在函数中定义的变量就是局部变量,其作用范围仅限函数的内部。
Ø 形参也是函数内部的变量,也是局部变量。
普通变量
在函数的外部声明的变量,其作用范围就是当前页面部分,函数内部无法使用,就是普通变量。
全局变量
在函数的内部和外部都可以访问和使用的变量就是全局变量
Ø 实现全局变量方法1:
u 在函数外部有一个变量
u 在函数的内部也具有一个同名变量
u 在函数内部的同名的变量前使用global关键字修饰,既可以实现全局变量
注意:global声明全局变量时禁止赋值
如果一个变量在函数内部已经赋值,以后使用global关键字进行全局化声明,结果是该变量的值变为函数外部变量的值。
Ø 实现全局变量方法2:
在函数的内部可以使用$GLOBALS[变量名]的方式直接调用函数外部的变量值,此时函数内外都可以使用,实现了另外一种方式的全局变量。
函数的分类
变量函数
当一个变量的值是某个函数的名称字符串时,我们可以使用变量()的方式调用对应名称的函数,这种调用方式就是变量函数。
u 例子:
$var =‘demo’;
function demo(){
PHP代码
}
//变量函数的使用
$var(); //等价于demo();
回调函数
回调函数只是变量函数的一个变形,本质上还是变量函数的应用。
在一个函数(A函数)中,通过变量函数的方式$var();调用另外一个函数(B函数,C函数),而其函数名通过A函数中的变量函数$var();会根据用户传入不同的实参,回过头调用不同名称的其他函数(B函数,C函数)
u 格式:
function A($var){
$var();//回调函数要素1.变量函数
}
A('B')//回调函数要素2.传入函数名称字符串
内部函数
Ø 内部函数:在函数内部声明的函数就是内部函数。(就是嵌套 )
u 在函数外部是否可以调用内部函数
不可以直接调用,但是如果调用外部函数之后,就可以任意调用内部函数。
u 在函数内部是否可以调用内部函数
可以调用,但是必须在内部函数定义之后调用。
u 内部函数的作用:
内部函数就是帮助外部函数完成一些子功能。
递归函数
在一个函数中调用当前函数本身,这种函数格式就是递归函数 (重点)
匿名函数
没有名字的函数就是匿名函数
如果声明一个函数,而该函数没有函数名,那么这个函数就是匿名函数
u 用法:用变量接收匿名函数
变量名 = function(){
函数体
};(注意:这里必须有分号,这是表达式。)
//非匿命函数中没有这个分号
Ø 匿名函数的高级应用 匿名回调函数
u 格式:
调用函数(匿名函数);
u 回调函数的区别:
n 以字符串方式传入的回调函数
n 以匿名方式传入的回调函数
n 字符串方式传入的回调函数,该函数可以使用多次,任意调用,因为这是个预先加载的普通函数。而匿名函数方式传入的回调函数,只可以在当前回调函数中使用,其他地方无法使用
n 匿名函数的回调函数方式效率较高,回调函数运行完毕,匿名函数就被收回。而字符串传入点的函数由于是预先加载的普通函数,所以在页面没有执行完毕时,不会被收回。
可变长度参数列表
在函数中,实参的实际传入个数允许操作形参的个数,在情况下如果获取所有传入的实参,可以使用func_get_args()在函数的内部来获取所有实参组成的数。在内部操作其他操作
文件包含
Ø include文件包含
u 作用:相当于将文件的内容复制到指定的文件当中。
u 常用语句包含函数库文件或者配置文件。任何PHP文件都可以包含
Ø include_once 和include的区别:
include包含文件可以包含N次,而include_once只能包含一次
include的效率略高于include_once因为include_once需要判断
include包含文件成功,返回数值整型,但是include_once第一次包含文件返回 1,以后包含相同文件返回ture
Ø 格式:
include()函数格式
include''指令格式
include_once() 函数格式
include_once ' ' 指令格式
Ø require请求 需要
u 作用和include几乎相同,将一个文件请求到另一个文件中。
Ø require_once 函数
u 作用:相当于require的方式,仅包含一次文件,功能类似与include_once 都是包含一次
Ø require和require_once的区别:
u 就相当于include和include_once的区别
Ø 格式:
require()函数格式
require '' 指令格式
require_once()函数格式
require_once '' 指令格式
Ø include 和require的区别
include包含文件如果包含失败,提示warning级错误
require包含文件如果包含失败,提示error级别的错误
include包含文件失败,后续代码继续执行
require包含文件失败,后续代码将不再执行
PHP中的系统函数
数学函数
Ø abs();绝对值 负变正 正还是正
Ø ceil(); 进一法取整(不更改类型 是float还是float)
Ø round();对浮点数进行四舍五入(不更改类型)
u @param1 要四舍五入的小数
u @param2 可选参数,设置保留几位小数
Ø floor(); 舍去法取整
Ø max(); 找出最大值
Ø min(); 找出最小值 注意:如果是0和纯字符串来比较,谁在前,谁就是最小值
Ø mt_rand(); 生成一个更好的随机数
Ø rand(); 生成一个随机数
Ø pi();得到圆周率的值 3.14
Ø pow(); 指数表达式就是^这个数学操作
Ø sqrt(); 平方根函数 echo sqrt(9); //3
字符串函数
Ø chr(); 给出一个ascii值 返回指定的字符 根据阿斯克码表来返回
Ø ord(); 给一个字符返回一个阿斯克码值(ascii)
u 需要记忆ascii值
u 48-57 -> 0-9
u 68-90 -> A-Z
u 97-122 -> a-z
Ø strlen(); 统计字符串的长度,或者说统计字符串中字符的个数
Ø chunk_split 将字符串分割成小块
u @param1 要分割的字符串
u @param2 可选参数 几个一分割
u @param3 可选参数 用于分割的字符
Ø explode(); 字符串切割成数组
u @param1 用什么字符切割字符串
u @param2 要操作的字符串
u 返回值:按照切割字符串返回指定的数组
Ø implode(); 将数组链接成字符串
u @param1 需要连接字符串的字符
u @param2 要连接成字符串的数组
u 返回值:返回连接好后的字符串
Ø ltrim(); 删除字符串左边的空白或者预定义字符
Ø rtrim(); 删除字符串右边的空白或者预定义字符
Ø trim(); 删除字符串两边的空白或者预定义字符
Ø str_replace ();字符串替换函数
u @param1 要查找的内容
u @param2 要替换的内容
u @param3 在哪个字符串或者数组中进行操作
u @param4 可选参数 返回替换的次数
u 返回值:返回替换后的新字符串或者新数组
Ø md5();字符串加密函数 只能加密 不能解密 一般用于密码
Ø nl2br(); \n转换br标签
Ø str_shuffle(); 随机打乱字符串的函数
Ø substr(); 截取字符串函数
u @param1 表示要截取的字符串
u @param2 表示从哪开始截取 如果是负数 表示从后往前数
u @param3 可选参数 表示截取几位,如果是负数,表示保留几位
Ø substr_count(); 统计一个字符串在另一个字符串中出现的次数
u @param1 要操作的字符串
u @param2 要查找的字符串
u @param3 可选参数 表示从第几位下标开始查找
u @param4 可选参数 表示查找多长
Ø strstr(); 返回一个字符串在另一个字符串中从开始位置到结束位置的字符串
u @param1 要操作的字符串
u @param2 要查找的字符串
u @param 可选参数 如果设置为true则返回查找字符串之前的字符
Ø strpos(); 查找字符串中某字符最先出现的位置
u @param1 要操作的字符串
u @param2 要查找的字符
u @param3可选参数,如果设置表示从第几位开始查找
u 返回值:返回的是字符串的下标
Ø strrpos();寻找某字符串中某字符串最后出现的位置
u @param1 要操作的字符串
u @param2 要查找的字符
u @param3可选参数,如果设置表示从第几位开始查找
u 返回值:返回的是字符串的下标
Ø strrchr(); 查找某字符串中最后一次出现的字符到末尾的字符串
u @param1 要操作的字符串
u @param2 要查找的字符
数组函数
Ø count();统计数组中的元素个数
Ø array_shift(); 删除数组中的第一个元素
u @param1 引用的方式传入实参数组变量
u 返回值:返回被删除的第一个元素值
注意:以引用的方式传入实参数组变量 证明实参值赋值给形参值后,形参值在函数内部发生改变,对应外部的实参值也会发生改变
Ø array_pop(); 删除数组中最后一个元素
u @param1 引用的方式传入实参数组变量
u 返回值:返回被删除的最后一个元素值
Ø array_unshift(); 在数组的开头插入一个或者多个元素
u @param1 要操作的数组
u @param2 要往数组开头添加的值
u @..... 之后的参数任意多个 想添加几个都行
u 返回值:返回新数组的长度
Ø array_push();在数组的末尾插入一个或者多个元素(该函数改变的是原有数组)
u @param1 要操作的数组
u @param2 要往数组末尾添加的值
u @..... 之后的参数任意多个 想添加几个都行
u 返回值:返回新数组的长度
Ø in_array(); 在数组中搜索给定的值,区分大小写(判断一个字符串是否在数组中出现)
u @param1 需要搜索的值或字符串(区分大小写)
u @param2 在那个数组中搜索
u 返回值:返回布尔值 true查找到 false 没有查找到
Ø list(); 用数组元素为一组变量赋值(只能是索引数组。就是重新给数组的下标赋值)
Ø array_slice(); 从数组中取出一段
u @param1 要操作的数组
u @param2 从那个下标开始取出
u @param3 可选参数,取出几条
看函数手册的经验
Ø 常规函数
bool copy(string $source,string $dest)
Ø 带有mixed的函数,表示可以传任何类型的数据变量或者值都可以
bool chown(string $filename,mixed $user)
l 带有&符的参数的函数,表示这个参数不能传数值,只能传一个变量,函数中将变量的值改变,我们在使用这个变量的时候也是变化的
bool sort(array &$array[, int $sort_flags=SORT_REGULAR])
Ø 带有中括号[]函数,表示这个参数是可选的,如果你传值了就用你传的值,如果没有传真,就使用默认值也叫默认函数
bool sort(array &$array[, int $sort_flags = SORT_REGULAR])
Ø 带有...的参数函数,表示可以传任意多个参数
int array_unshift ( array &$array , mixed $var [, mixed $... ] )
Ø 带有callable或者参数名叫$callback 的参数函数。表示这个位置需要传入一个函数名称字符串或者匿名函数做回调使用
array array_filter ( array $input [, callable $callback = "" ] )