一函数初步
1基本概念
函数是模块化程序的产物。在实际开发过程中,我们会将一个项目划分为各个大的功能模块。同将大的功能模块发为小的功能。再使用函数将这个最小的功能(一个动作)实现。
从代码上看,函数就是使用{},将完成某一功能的代码括起来(封装),再使用function 关键字,为这段代码设置一个名子,这个名子就是函数名,函数名后必须有(),这个()表示函数只能被调用。
2声明语法
语法:
function funName(形参列表){
函数体
【return 值】
}
示例:
3调用语法
语法:
funName(实参列表);
示例:
4函数名
php中函数名是不区分大小写。函数名的命名规则与变量的命名规则相同。只能包含字母、数字、下划线。而且以字母下划线开头。
5可变函数
如果$a的值是另一个变量的名,那么可以使用$$a来访问另一个变量的值。
如果$f变量的值是另一个函数名,那么可以使用这个变量来访问函数
示例:
示例:
6函数体
完成某一功能代码段
7return语句
在我们使用函数完成一些功能时,有时会将函数计算的数据,传递出来。此时可以使用return。
提示:
程序是用于处理数据,函数所处理的数据有两个方向:
其一,从外到内,使用实参与形参。
其二,从内到外,使用return
函数内部可以有多个return,只要遇到一个return就会中断函数的执行。
函数内也可省略return语句。
8匿名函数
没有名子的函数就是匿名函数(anonymous function),也称之为闭包函数(closure)。
提示:
JS中的函数可以自调用,但是PHP中的函数没有办法自调用。
php中的匿名函数,可以赋值给一个变量,还可以用于某个函数的参数。
示例:将匿名函数赋值给变量,通过这个变量可以调用匿名函数。
回调函数callback:
我们定义一个函数很多的时候是为了自己调用。但在开发过过程中,我们在某别人的函数,或系统函数时。这个些函数需要参数,而有些参数要求你传递的一个函数。作为参数传递的函数就是回调函数。
示例:匿名函数作为回调函数(参数)传递
二函数的参数
1形参
函数定义时的参数就是形参
形参是被动的接收数据。
形参只对内存有效,对于外部是不可见。
示例:
2实参
函数调用时的参数就是实参
主动向函数内部传递实际的数据。
提示:
形参与实际让函数更具有通用性。
3形参的默认值
php中在定义函数时可以为形参赋值一个值,这个值就是形参的默认值。
在调用函数时,如没有为具有默认值的形参传递数据,那么形参使用的是默认值,
如果有为具有默认值的形参传递数据,那么这个形参使用实际传递过来的数据。
一般具有默认值的形参位于,形参列表的最后。
示例:
4形象的引用传值
php中函数的实参与形参之间也是一种赋值方法,默认是
PHP中可以在形参前加&符号,将实参与形参之间默认的赋值传值,更改为引用传值。
5伪类型(函数)
PHP语言本身提供了8种数据类型。但是在使用手册中我们会遇到另外几中:
mixed 表示类型不确定
callback 表示函数
scalar 如果是int、float、string、bool
6相关函数(系统函数)
func_get_args();
用于获取实参,并以数组的形式返回。
func_get_arg(ind);
用于获取ind下标指定的实参
func_num_args();
用于获取实参的个数。
示例:
示例:应用
示例:
说明:
…$变量名 用于将实参以数组元素的形式保存在这个变量中。
7函数运行的内存原理
三作用域
在PHP中函数是用于封装某一功能的代码段,函数在对代码进行封装会有一些影响。
PHP中分两种作用域:全局作用域,局部作用域。
1全局作用域与全局变量
在函数外部的定义的变量,其作用域 就是全局作用域,变量就是全局变量。
示例:
2局部作用域与局部变量
在函数内部定义的变量,其作用域就是局部作用域,这个变量就是局部变量。
示例:
提示:
默认php中有很”清晰”的作用域,外部只能访问外部的,内部只能访问内部。
3global关键字
虽然php默认作用很清晰,但是有时确定会外部访问内部或内部访问外部。如何解决?
①、通过参数的传址方式
在形参前使用&,可以达到内部访问外部
②、$GLOBALS
$_GET\$_POST….$GLBOALS,超全局变量
示例:
提示:
以上两种变通的方式都只是实现了内部访问外部,如果我即想内部访问外部,外部也同时可以访问内部。
③、global关键字
语法:
global 变量名;
说明:
在函数内部建立一个与函数外部同名的变量的引用。如果外部有这样的同名变量,会在外部创建一个同名的变量。
4常量的作用域
常量没有作用域限制,一个脚本中的常量,在任何的位置都可以访问。
5预定义变量(超全局变量)
超全局变量也不受作用域的限制。
四变量的声明周期
1作用域与生命周期
作用域 表示的是一个变量的作用空间范围。
生命周期 表示的是一个变量的作用时间范围。
2全局变量的生命周期
全局变量 生命周期是从脚本执行开始到脚本执行结束。
3局部变量的生命周期
局部变量 生命周期是从函数执行开始,到函数执行结束。
五静态变量
1定义
在函数内部使用static声明的变量,就是静态变量。
示例:
2原理
静态变量在函数多次被调用时,只会被初始化一次,并且静态变量的值并不会随着函数执行后空间的销毁而被销毁。
在函数下一次调用时,仍然可以访问其值。
提示:
静态变量的使用场景,如果想在同一个函数多次调用时,共享一份数据。那么就使用静态变量。
六系统函数
1日期时间函数
①、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)
说明:
将一个以字符的形式描述的时间信息转换为时间戳。
七递归
函数自己调用自己就是递归。
递归解决问题的特点:完成一个需求有多个步骤,但完成每一步所实现的代码是十分相似的,只有函数所传递的参数不同而已。
示例:
fibonacci数列