PHP基础(三)函数
PHP中函数名不区分大小写。
函数:function
函数定义语法:
函数的几个对应的关键点:function,关键字、函数名、参数(形参和实参)、函数体和返回值。
基本语法:
function 函数名(参数){
//函数体
//返回值 return 结果;
}
定义函数的目的:是为了实现代码的重复利用。一个功能一个函数(简单明了)
函数调用特点:只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义前)
函数返回值
返回值:return,指的是将函数实现的结果通过return关键字,返回给函数外部(函数调用处),在PHP中所有函数都有函数值(如果没有明确return使用,那么系统默认返回NULL)。
return作用
1、return在函数内部的价值:返回当前函数的结果(当前函数运行结束)
2、return还可以在文件中直接使用(不在函数中),代表文件将return结果转交给包含当前文件的位置。(通常在系统配置文件中使用较多),在文件中也代表终止文件后面的代码,return之后的内容不会执行。
PHP作用域
1、全局变量:就是用户普通定义的变量(函数外部定义)。
用户定义的所有全局变量都会放在$GLOBALS中,局部作用域不能访问全局变量,$GLOBALS是一个超全局变量,可以任意地方访问。
所属全局空间:在PHP中只允许在全局空间使用,理论上函数内部不可访问。
脚本周期:知道脚本运行结束(最后一行代码执行完)
2、局部变量:就是在函数内部定义的变量
所属当前函数空间:在PHP中只允许在当前函数自己内部使用
函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)
3、超全局变量:系统定义的变量(预定义变量:$_SERVER_、$_POST_等)
所属超全局空间:没有访问限制(函数内外都可以访问)
超全局变量会将全局变量自动纳入到$GLOBALS里面,而$GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量,但是必须使用数组方式。(不常用)
如果想在函数内部使用外部变量:除了$GLOBALS外,可以通过参数传值。
Global关键字
global 关键字:实现全局访问局部,同时局部也可以访问全局
global关键字是一种在函数里面定义变量的一种方式。
1、如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量)
2、如果使用global关键字定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量
本质形式:在函数的外部和内部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。
基本语法:
global 变量名;//不能赋值
变量名 = 值;//修改
静态变量
静态变量static,是在函数内部定义的变量(属于局部变量),使用static关键字来修饰,用来实现跨函数共享数据(同一个函数被多次调用)的变量:函数运行结束所有局部变量都会清空,如果重新运行函数,所有局部变量又会重新初始化。
基本语法:
function 函数名(){
static 变量名 = 值; // 通常会在定义的时候就直接赋值
}
静态变量的原理:系统在进行编译的时候就会对static这一行进行初始化:为静态变量赋值,函数在调用的时候,会自动跳过static关键字这一行。
静态变量的使用:
1、为了统计:当前函数被调用的次数
2、为了统筹函数多次调用得到的不同结果(递归思想)
可变函数
可变函数:当前有一个变量所保存的值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用。
基本语法:
$变量 = ‘display’;
function display(){
}
//可变函数
$变量();
可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候,需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用。
匿名函数
匿名函数:没有名字的函数。
基本语法:
变量名 = function(){
};
变量名();//调用
变量保存匿名函数,本质得到的是一个对象(closure);
闭包
闭包:closure,一词来自于以下两者的结合:要执行的代码块(由于自变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。
简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)。
证明:函数的局部变量在函数使用之后没有被释放?
1、使用内部匿名函数;
2、匿名函数使用局部变量:use关键字;
3、匿名函数被返回给外部使用;
伪类型
伪类型:假类型,实际上在PHP中不存在的类型,但是通过伪类型可以帮助程序员更好的查看操作手册从而方便学习。
伪类型主要有两种:在三大类八小类之外。
mixed:混合的,可以是多种PHP中的数据类型
number:数值的,可以是任意数值类型(整型和浮点型)
常用系统函数
1)有关输出的函数
echo:输出内容(非函数)
print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号。
print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)
var_dump:可以输出任何内容
printf():格式化输出
2)有关时间的函数
date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特定的时间戳,那么就是默认解释当前时间戳。
time():获取当前时间对应的时间戳。
microtime():获取微妙级别的时间。
strtotime():按照规定格式的字符串转换成时间戳。
3)有关数学的函数
max():指定参数中最大的值(多个数或者数组)。
min():比较两个数中较小的值。
rand():得到一个随机数,指定区间的随机整数。
mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)。
round():四舍五入。
ceil():向上取整。
floor():向下取整。
pow():求指定数字的指定次结果。
abs():取绝对值
sqrt():求平方根
4)有关函数的函数
function_exists():判断指定的函数名字是否在内存中存在,帮助用户不去使用一个不存在的函数。
func_get_arg():在自定义函数中去获取指定数值对应的参数。
func_get_args():在自定义函数中去获取所有的参数,得到的是一个数组
func_num_args():获取当前自定义函数的参数数量