目录
一、函数
1、基本概念
函数是模块化程序的产物。在实际开发过程中,我们会将一个项目划分为各个大的功能模块,同将大的功能模块划
分为小的功能。再使用函数将这个最小的功能实现。
从编程过程上看,函数就是使用{},将完成的某一功能的代码段封装,再使用function关键字,为这段代码设置一个
名字,即函数名,函数名后需有() ,表示标记函数名与一般字符串区分,可被调用。
2、声明语法
语法:
function funName(形参){
函数体
【return 值】
}
3、调用语法
语法:
function funName(实参列表);
4、函数名
php中函数名不区分大小写,但我们在编程是一般区分大小写,保证代码的可读性。函数名的命名规则与变量的命
名规则相同。只能包含字母、数字、下划线。而且以字母或下划线开头。
5、可变函数
<?php
//模拟从数据库读取的数据
function hello(){
echo 'hello','<br />';
}
function world(){
echo 'world'.'<br />';
}
$f = 'hello';
$f();
$f = 'world';
$f();
6、函数体
完成某一功能的代码段
7、return语句
在我们使用函数完成一些功能时,有时需要将函数计算的数据或状态传递出来,此时可以使用return。
函数处理数据的两个方向
其一:外到内,使用实参与形参
其二:内到外,使用return
函数内可以缺省return,也可有多个return,但遇到一个return就会中断函数的执行
8、匿名函数
没有函数名的函数就是匿名函数(anonymous function),也称之为闭包函数(closure)
如果是匿名函数一定记得要以';'结尾
提示:
js中的函数可以自调用,但是php中的函数无法进行自调用。
php中的匿名函数,可以赋给一个变量,还可以用于某个函数的参数。
示例:将匿名函数赋值给变量,通过这个变量调用匿名函数
<?php
//模拟从数据库读取的数据
//将匿名函数赋值给变量
$f = function(){
echo __FUNCTION__;
};
$f();
匿名函数作为回调函数使用
回调函数callback:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
示例:匿名函数作为回调函数(参数)传递
<?php
//模拟从数据库读取的数据
//将匿名函数赋值给变量
function showInfo($f){
$f();
}
showInfo(function (){
echo 'hello';
});
二、函数的参数
1、形参
函数定义时的参数
2、实参
函数调用时的参数
形参与实参让函数更具有通用性
3、形参的默认值
php在定义函数时可以以为形参赋值一个值,这个值就是形参的默认值。
在调用函数是,如果没有为具有默认值的形参传递值时,形参采用默认值,反之使用传递过来的值。
具有默认值的形参位于形参列表的最右边。
<?php
/*
* 函数
*/
function showInfo($l,$i = 100){
echo $l*$i;
}
$a = 10;
$b = 20;
showInfo($a,$b);
showInfo($a);//只传递第一个参数,第二个参数使用形参的默认值
4、形参的引用传值
实参与形参传递默认采用数值传值
<?php
/*
* 函数
*/
function my_fun($v1,$v2){
$v1 = 100;
$v2 = 200;
echo $v1,'<br />',$v2,'<br />';
}
$a = 10;
$b = 20;
my_fun($a,$b);
echo $a,'<br />',$b,'<br />';
php中可以在形参前加&符号,将实参与形参之间的传值方式更改为引用传值
<?php
/*
* 函数
*/
function my_fun(&$v1,&$v2){
$v1 = 100;
$v2 = 200;
echo $v1,'<br />',$v2,'<br />';
}
$a = 10;
$b = 20;
my_fun($a,$b);
echo $a,'<br />',$b,'<br />';
5、伪类型(函数)
PHP语言本身提供了8钟数据类型。但是在PHP手册中能查到其他几种类型
mixed 表示类型不确定 max()函数
callbcak 表示函数
scalar 标量,int、float、string、bool
6、相关函数(系统函数)
func_get_args(); 用于获取实参,以数组的形式放回
func_get_arg(int $arg_num
); 从用户自定义函数的参数列表中获取某个指定的参数。$arg_num为偏移量从0开始
func_num_args(); 用于获取实参的个数。
示例:
<?php
/*
* 函数
*/
//求n个数的和
function getSum(){
echo '实参的个数为:',func_num_args(),'<br />';
echo '第一个实参为:',func_get_arg(0),'<br />';
echo '<pre>所有的实参如下';
print_r(func_get_args());
}
getSum(10,20,30);
应用:求n个数的和
<?php
/*
* 函数
*/
//求n个数的和
function getSum(){
$sum = 0;
$count = func_num_args();//获取数组的长度
$arguments = func_get_args();//获取整个数组
for($i=0;$i<$count;$i++){
$sum+=$arguments[$i];//求和
}
return $sum;
}
echo getSum(10,20,30);
另一种传不定长度数组的方式
<?php
/*
* 函数
*/
//求n个数的和
function getSum(...$args){
$sum = 0;
for($i=0;$i<count($args);$i++){
$sum+=$args[$i];
}
echo $sum;
}
getSum(10,20,30);
说明:...$变量名 用于将实参以数组的形式保存在这个变量中。
三、作用域
在PHP中函数适用于封装莫伊功能的代码段,函数在对代码进行封装会有一些影响。
1、全局作用域与全局变量
在函数外部定义的变量,其作用域就是全局作用域,变量就是全局变量
示例:在php中全局变量是不能在函数内部进行访问的,函数内部属于局部变量
<?php
/*
* 作用域
*/
$i = 10;//全局变量
echo $i;
function showInfo(){
echo $i;
}
showInfo();
2、局部作用域与局部变量
在函数内部定义的变量,其作用域就是局部作用域,变量就是局部变量
示例:
<?php
/*
* 作用域
*/
function showInfo(){
$i = 10;//内部变量
echo $i;
}
showInfo();
echo $i;
注:默认php中有很“清晰”的作用域,外部只能访问外部,内部只能访问内部。
3、global关键字
php中有很“清晰”的作用域。但又是确实需要内部访问外部变量,或外部访问内部变量的情况。
解决方式:
①、内部访问外部变量采用传参的方式
②、外部访问内部变量通过函数return传出内部变量的值,或通过引用传值方式传递出内部变量
③、$GLOBAL(超全局变量),可以实现内部访问外部
所有定义的全局变量会自动保存在$GLOBAL中
<?php
/*
* 作用域
*/
$name = 'Jan';
$age = 20;
echo '<pre>';
print_r($GLOBALS);
示例:
<?php
/*
* 作用域
*/
$name = 'Jan';
$age = 20;
function showInfo(){
echo $GLOBALS['name'],'<br />';
echo $GLOBALS['age'],'<br />';
}
showInfo();
④global关键字
语法:
global $变量名
说明:
global一定实在函数内部使用的,其作用是在函数内部建立一个与函数外部同名的变量的引用
<?php
/*
* 作用域
*/
$i = 10;
function showInfo(){
global $i;
echo $i,'<br />';
$i+=10;
}
showInfo();
echo $i,'<br />';
如果外部没有这样的变量名,会在外部自动创建一个同名变量
<?php
/*
* 作用域
*/
function showInfo(){
global $i;
$i=10;
}
showInfo();
echo $i,'<br />';
echo '<pre>';
print_r($GLOBALS);
4、常量的作用域
常量没有作用域的限制,一个脚本中的常量,在任何位置都能访问
5、预定义变量(超全局变量)
超全局变量也不受作用域的限制
四、变量的生命周期
1、作用域与生命周期
作用域 表示的是一个变量的作用空间范围
生命周期 表示的是一个变量的作用时间范围
2、全局变量的生命周期
全局变量的生命周期从脚本执行开始到脚本执行结束
3、局部变量的生命周期
局部变量的生命周期是从函数执行开始到函数执行结束
五、静态变量
1、定义
在函数内部使用static声明的变量,就是静态变量
<?php
/*
* 静态变量
*/
function showInfo(){
$i = 1;
$i++;
echo $i,'<br />';
}
showInfo();//2
showInfo();//2
showInfo();//2
showInfo();//2
echo '<br />';
function show(){
static $j = 1;
$j++;
echo $j,'<br />';
}
show();//2
show();//3
show();//4
show();//5
2、原理
静态变量在函数多次被调用时,只会被初始化一次,并且变量的值并不会随着函数执行结束而被销毁
在函数下一次调用时,仍然可以访问其值。
六、系统函数
1、日期时间函数
①、time()
说明:
用于获取当前时间的时间戳。单位是秒。时间戳就是从时间原点至现在的秒数
时间远点:计算机中规定从1970年1月1日0时0分0秒为时间原点。
②、micortime() 返回时间戳的微秒数
示例:
<?php
/*
* 静态变量
*/
echo time(),'<br/>';//精确到秒级
echo microtime(),'<br/>';//精确到毫秒级
③、date()
语法:
date(format [,time])
说明:
用于格式化时间信息。
format 用于格式化时间的字符串 字符对应解析参考手册(http://php.net/manual/zh/function.date.php)
time表示所要格式化的时间戳,可省略,若省略表示对当前时间进行格式化
<?php
/*
* 静态变量
*/
echo date('Y-m-d H:i:s');
④、mktime()
语法:
mktime(时,分,秒,月,日,年);
说明:
用于获取指定时间的时间戳;
<?php
/*
* 静态变量
*/
echo mktime(12,10,7,11,8,1988);
//获得1998年11月8日12时10分7秒的时间戳
⑤、strtotime()
语法:
strtotime(string $time
[, int $now
= time() ]);
说明:
将任何字符串的日期时间描述解析为时间戳
<?php
/*
* 静态变量
*/
echo date('Y-m-d H:i:s',time()),'<br />';
echo date('Y-m-d H:i:s',strtotime('+ 3month')),'<br />'
//strtotime('+ 3month')获得三个月后的时间戳
手册(http://php.net/manual/zh/function.strtotime.php);