函数初步
基本概念
函数是模块化程序的产物,在实际开发过程中,我们会将一个项目划分为各个大的功能模块,通时将大的功能模块发为小的功能,在使用函数这个最小的功能(一个动作)实现
从代码上看,函数就是使用{},将完成摸个功能的代码括起来(封装),在使用function关键字,为这段代码设置一个名字,这个名字就是函数名,函数名后必须有(),这个()表示函数只能被调用
申明语法
语法:
function funName(参数列表){ 函数体 【return 值】 }
示例:
调用语法:
语法:
funName(实参列表);
示例:
函数名
php函数名是不区分大小写,函数名的命名规则和变量名相同,只能包含字母、数字、下划线。而且以字母下划线开头
可变函数
如果$a的值是另一个变量的名,那么可以适应$$a来访问另一个变量的值
如果$a变量的值是另一个函数名,那么可以使用这个变量来访问函数
示例:
示例:
函数体
完成某一段功能的代码段
return语句
在我们函数完成一些功能时,又是会将函数计算的数据,传递出来。此时可以使用return
提示:
程序是用于处理西湖局,函数所处理的数据有两个方向
其一,从内而外使用return
其二,从外而内 使用实参和形参
函数内部可以有多个return 只要遇到一个return就会中断函数的执行
函数内也可以省略return语句
匿名函数
没有名字的函数就是匿名函数,业务称之为闭包函数
提示:
js中的函数可以自调用,但是php中的函数没有办法自调用
php中的匿名函数,可以赋值一个变量,还可以用于某个函数的参数
示例:将匿名函数赋值给变量,通过这个变量可以调用匿名函数
回调函数 callback
我们定义一个函数很多的时候是为了自己使用,但是在开发过程中,我们在其他热的函数,或系统函数时,这些函数需要参数,而有些参数要求你传递的一个函数。作为传参的函数就是回调函数
示例:
匿名函数作为回调函数(参数)传递
函数参数
函数定义时的参数是形参
形参是被动的接收数据
形参是对内存有效,对于外部是不可见的
示例:
实参
函数调用是的参数就是实参
主动向函数内部传递实际的数据
提示:
形参余实参让函数更加具有通用性
形参的默认值
php中在定义函数时候可以为形参赋值一个值,这个值就是形参的默认值
在调用函数时,如果没有为具有默认值的形参传递数据,那么形参使用的就是默认值,如果有为具有默认值的形参传递数据,那么这个形参使用实际传递过来的数据,一般具有默认值的形参位于,形参列表的最后
示例:
形参的引用传值
php中函数的实参与形参之间也是一种赋值方法,默认是
php中可以下形参前加&符号,将实参和形参之间默认的复制传值,更改为引用传值
伪类型(函数)
PHP语言本身提供了8种数据类型。但是在使用手册中我们会遇到另外几中:
mixed 表示类型不确定
callback 表示函数
scalar 如果是int、float、string、bool
相关函数(系统函数)
func_get_args();
用于获取实参,并以数组的形式返回
func_get_arg(inf);
用于获取ind下标指定的实参
func_num_args();
用于获取实参的个数
示例:
示例:应用
示例:
说明:
…$变量名 用于将实参以数组元素的形式保存在这个变量中
函数运行的内存原理
作用域
在php中函数是用于封装某一功能的代码段,函数在对代码进行封装会有一些影响,php中分为两种作用域,全局作用域和局部作用域
全局作用域和全局作用域
在函数外部的定义的变量,其作用域就是群居作用域,变量就是全局变量
示例:
局部作用域和局部变量
在函数内部定义的变量,器作用域就是局部作用域,这个变量就是局部变量
示例:
提示:默认php中有很清晰的作用域,外部只能访问外部的,内部只能访问内部的
global关键字
虽然php默认作用很清晰,但是有时确定会外部或内部访问外部。如何解决?
通过默认参数的传址方式
在形参前使用&,可以达到内部访问外部
$GLOBALS
$_GET$_POST...$GLOBALS,超全局变量
示例:
提示:
以上两种变通的方式都只是实现了内部访问外部
global关键字
语法:
global 变量名
说明:
在函数内部建议一个与函数外部同名的变量的引用,如果外部有这样的同名变量,会在外部创建一个同名的变量
常量的作用域
常量没有作用域限制,一个脚本的常量,在任何位置都可以访问
预定义变量(超全局变量)
超全局变量也不受作用域的限制
变量的生命周期
作用域和生命周期
作用域表示的是一个变量的作用空间范围
生命周期表示的是一个变量的作用时间范围
全局变量的生命周期
全局变量 生命周期是从脚本执行到脚本局结束
局部变量的生命周期
局部变量 生命周期是从函数执行开始到函数执行结束
静态变量
在函数内部使用static申明的变量,就是静态变量
示例:
原理
静态变量在函数多次被调用时,只会被初始化一次,并且静态变量的值并不会随着函数执行后空间的销毁为而被销毁
在函数下一次调用时,任然可以访问其值
提示:
静态变量的使用场景,如果想在同一个函数多次调用时,共享一份数据,那么就使用静态变量
系统函数
日期时间函数
time()
说明:
用于获取当前时间的时间戳,单位是秒,时间戳就是从时间原点至现在的一个秒数
时间原点,计算机中规定从1970年1月1日0时0分0面那一刻为时间原点
microtime();
date();
语法:
date(format【,time】);
说明:
用于格式化时间信息
time表示所要格式化的时间戳,如果省略表示对当前时间进行格式化
format 用于格式化时间的字符串
Y 表示4位的年份
m 月份,有前导0
d 表示,日期
H 表示24小时机制的小时数
i 表示分钟数
s 表示秒数
mktime()
语法:
mktime(时,分,秒,月,日,年);
说明:
用于获取指定时间的一个时间戳
strtotime()
语法:
strtotime(string)
说明:
讲一个字符的形式描述的时间信息转换为时间戳
递归
函数自己调用自己就是递归
递归函数解决问题的特点:完成一个需求有多个步骤,但完成每一步所要实现的代码是十分相似的,只有函数所传递的参数不同而已
示例:
The end