函数、静态变量、可变变量、匿名函数、伪类型
函数:function
定义语法: function 关键字、函数名、参数(形参和实参)、函数体和返回值
基本语法:
//定义函数
function display(){
//函数体
echo 'hello world';
}
//结果不报错,则说明没有问题
//调用函数
display();
//函数参数
function add($arg1,$arg2){ //形参可以多个
//函数体:可以直接使用形参运算
echo $arg1+$arg2;
}
//调用函数
$num1=10;
add($num1,20); //传入的实参,可以是变量或者其他有值的表达式(变量,常量,运算)
//1.系统调用函数add函数,去内存中寻找是否有add函数;有
//2.系统在栈区内存空间运行函数add
//3.系统会查看函数本身是否有形参:有,两个
//4.系统会判断调用时候是否有实参:有,两个
//5.系统默认会将实参的值$num1,20取出顺序复制给形参,$arg1和$arg2
//6.执行函数体:运行
//7.返回函数执行(返回值)
注意:
1.在php中运行允许实参多余形参(个数):函数内部比不用而已
2.在PHP中理论形参没有限制()
默认值 default value:形参的默认值
默认值用在一些一定有默认数据参与,但是可能通常是默认我们知道的值
//函数默认值
function jian($num1=0,$num2=0){
echo $num1-$num2;
}
jian(); //输出0
jian(10); //输出10
jian(10,1);//输出9
注意:
1.默认值的定义是放在最右边(多个),不能左边形参有默认值,但是右边没有
2.函数外部定义的变量名字与函数定义的形参冲突(同名),是没有关系
函数体:{}里的内容
1.函数定义
2.定义常量
3.使用流程控制
4.可以调用函数
返回值:return
通过关键字return,返回函数外部:在PHP中所有函数的函数都有返回值(如果function没有定义return,默认返回NULL )
return可以返回任何数据类型
1.return在函数内部的价值:返回当前函数的结果(运行结束)
2.return还可以在文件中直接使用(不在函数里面):代表文件结果return后面跟内容不会在再执行
//函数返回值
function display(){
echo __FUNCTION__;
}
function add($num1,$num2){
return $num1+$num2; //函数运行结束
}
$res =add(10,20);
echo $res;
作用域:变量能够被访问的区域
在PHP中作用域严格分为两种:但是PHP内部定义一些在严格意义之外的一种,所以总共算三种
1.全局变量:脚本周期
2.局部变量:函数周期
//PHP中作用域
//默认的代码空间:全局空间
$global = 'global area';
//局部变量
function display1()
{
$inner=__FUNCTION__;
echo $global;
}
display1(); //全局变量不能在函数里使用
echo $inner; //结果inner不能访问
3.超全局变量:系统定义的变量,没有访问限制
帮助局部访问全局,全局访问局部,但是要用数组的形式
//默认的代码空间:全局空间
$global='global area';
//超全局变量
function display2()
{
$inner=__FUNCTION__;
echo $GLOBALS['global']; //一般不这么干
}
display2(); //打印除global area说明全局变量被局部访问
函数内部使用外部变量:
1.$GLOBALS,参数传值
2.如果global定义的变量名在外部存在(全局变量),那么系统在函数内部定义一个变量直接指向全局变量所指向的内部空间(同一个变量)
3.如果global定义的变量名在外部不存在(全局变量),系统自动在全局定义一个与局部定义同名的全局变量
注意:通常不全局和局部互相访问
//默认的代码空间:全局空间
$global='global area';
//超全局变量
function display2()
{
//定义变量:使用全局变量
global $global;
echo $global;
//定义变量:全局不存在
global $local;
$local ='inner';
}
display2(); //全局变量不能在函数里使用
echo $local; //结果显示inner
静态变量 static:实现跨函数共享数据的变量
(跨函数:一个函数被多次调用)
基本语法:
function display(){
$local =1; //局部变量
static $count=1; //静态变量:进行初始化
echo $local++,' ',$count++,'<br/>';
}
display(); //输出1 1
display(); //输出1 2
display(); //输出1 3
使用:
1.统计:当前函数被调用次数(替代方法)
2.统筹函数多次调用的得到不同结果(递归思想)
可变函数:变量所保存的值,刚好是一个函数的名字,那么就可以使用变量+(),来充当函数使用
在使用系统函数的时候,需要用户在外部定义一个自定义函数,但是需要传入到系统内部使用
回调函数:将一个用户定义的函数传给另外一个函数(函数名)去使用的时候,成为回调过程,而传入的函数称之为回调函数
//php可变函数
function display(){
echo __FUNCTION__;
}
//定义变量
$func ='display';
//可变变量
$func();
//回调函数
function sys_function($arg1,$arg2){
$arg2=$arg2+10;
return $arg1($arg2);
}
function user_function($num){
return $num *$num*$num*$num;
}
echo sys_function('user_function',10);
匿名函数
基本语法:
//匿名函数,变量存储匿名函数,本质得到一个对象(closure)
$func=function(){
echo 'hello world';
};
//调用匿名函数:可变函数
$func();
闭包:closure
函数内部有一些局部变量(要执行代码块)在函数执行之后没有被释放,是由于在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
怎么证明没有释放:
1.使用内部有匿名函数
2.匿名函数使用局部变量:use
3.匿名函数被返回给外部使用
function display1(){
$name= __FUNCTION__;
$innerfunction=function() use($name){
echo $name;
};
return $innerfunction;
}
$closure=display1();
//当前局部变量$name在display函数运行的并没有被释放,
//从而在外部调用内部的匿名函数的时候可以被调用
$closure();
伪类型:帮助查看操作手册从而方便学习。
Mixed:混合型,可以是多种PHP中类型
number:数值的,可以是任意数值类型(整型和浮点型)
例如:
string gettype(mixed $var)表示只要PHP中类型即可