函数的定义:函数就是一段封装好的代码块,可以随时调用。在PHP中有两种函数:自定义函数与系统函数。
自定义函数语法格式:
function 函数名称([参数1,[参数2]....])
{
函数体(程序内容叙述)
[return 返回值;]
}
注:[]里的东西可有可无
自定义函数的名称:
它是函数在程序代码中的识别名称,函数名可以是以字母或下划线开头后跟零个或多个字母、下划线和数字的任何字符串。
符合变量名的命名规则
函数名不区分大小写。
函数名不能重复,命名函数函数时不可使用已经声明的函数(这个和变量的命名不同,变量可以覆盖前一个变量名,而函数不可以),和PHP系统函数名称。
函数名称和变量名称的区别:
变量名严格区分大小写,函数名不区分大小写。
参数(可以分为形参和实参):
所谓参数就是:用来把数值从函数外部传入函数体中,并用来加以运算处理。
参数之间用“,”隔开,当函数不需要任何数值传入时,可以省略参数。
形参:声明函数时,函数名后面括号内的表达式称为形参。
function table(形参1,形参2){}
实参:被调用函数名后面括号中的表达式称为实参。
table(实参1,实参2);
实参和形参需要按顺序对应传递数据。
function table2($rows,$cols,$color='yellow')
{
echo '
| '.($i*$rows+$n).' | ';
| '.($i*$rows+$n).' | ';
| '.($i*$cols+$n).' | ';
}
table(3,3,'blue');
table();
4、可变长度参数函数
格式说明:
mixed funName(string arg1 [,string...]) #在参数列表中出现使用“...”描述的参数
使用默认参数函数适合实参个数少于形参的情况,而可变长度参数函数则适合实参个数多于形参的情况。
如果希望函数可以接受任意数量的参数,需要在函数中使用PHP系统提供的func_get_args()函数,它将所有传递个脚本函数的参数当作一个数组返回。
获取所有传入的参数:func_get_args();
获取所有传入参数的个数: func_num_args();
单独获取指定的参数: func_get_arg(n);
//可变长度参数函数:传入的参数个数是不确定的
function show()
{
//获取所有传入的参数,并将其转为一个数组返回
$arr = func_get_args();
//输出的$arr为数组
print_r($arr);
//获取所有传入参数的个数
echo func_num_args();
//单独获取指定的参数,需要传入参数的顺序号,从0开始
echo func_get_arg(3);
}
show('a','n','x','y','z');
function getInfo(){
$num = func_num_args();
for($i = 0;$i < $num;$i++){
echo func_get_arg($i).'
';
}
}
getInfo('姓名:小二','年龄:18','aihao:nvkeguan','teshuaihao:hejiu');
输出结果:
5
Array ( [0] => a [1] => n [2] => x [3] => y [4] => z )
y
姓名:小二
年龄:18
aihao:nvkeguan
teshuaihao:hejiu
5、引用参数函数
格式说明:void funName(array &arg) #在参数列表中出现使用 & 描述的函数
$arr = array(98,66,1,23,12,5);
echo '
';
print_r($arr);
function show(&$crr){
for($i = 0;$i <4; $i++){
($crr[$i] += 5).'
';
}
}
//$crr = &$arr;$arr是数组所以无法输出数组?
show($arr);
echo '';
print_r($arr);
echo '
';
echo '';
sort($arr);
print_r($arr);
输出结果:
Array
(
[0] => 98
[1] => 66
[2] => 1
[3] => 23
[4] => 12
[5] => 5
)
Array
(
[0] => 103
[1] => 71
[2] => 6
[3] => 28
[4] => 12
[5] => 5
)
Array
(
[0] => 5
[1] => 6
[2] => 12
[3] => 28
[4] => 71
[5] => 103
)
$var=100;
function testi($arg)
{
//局部变量无法使用全局变量,报错
echo $var;
echo '
';
//传参$var=100
echo $arg;
echo '
';
//改变局部变量的值,输出200
$arg=200;
echo $arg;
}
testi($var);
//改变局部变量的值,不会影响全局变量
echo $var;
echo '
';
function test(&$arg)
{
//局部变量无法使用全局变量,报错
echo $var;
echo '
';
//传参
echo $arg;
echo '
';
//改变局部变量的值,输出200
$arg=200;
echo $arg;
}
test($var);
//改变局部变量,全局变量的值也被改变200
echo $var;输出结果:
Notice: Undefined variable: var in D:xampphtdocs89HomeWorkmoxieyinyon.php on line 7
100
200100
Notice: Undefined variable: var in D:xampphtdocs89HomeWorkmoxieyinyon.php on line 28
100
200200
6、回调参数函数
格式说明:
mixed funName( callback arg ) #在参数列表中使用伪类型 callback 描述
所谓回调函数,就是指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中。
函数参数中,有一个参数值是另一个函数的函数名,那么这个函数就是回调函数
如果在函数的格式说明中,出现“callback”类型的参数,该函数就是回调函数。
callback也属于PHP中伪类型的一种,说明函数的参数需要接受另一个函数作为实参。
使用回调函数的目的是可以将一段自己定义的功能传到函数内部使用。
变量函数
变量函数也称为可变函数。如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且将尝试执行它。
2使用变量函数声明和应用回调函数
3借助call_user_func_array()函数自定义回调函数
格式说明:mixed call_user_func_array(callback function,array param_arr)
该函数有两个参数,第一个参数因为使用伪类型callback,所以这个参数需要是一个字符串,表示要调用的函数名,第二个参数则是一个数组类型参数,表示参数列表,按照顺序依次会传递给要调用的函数。
function fun($msg1,$msg2){
echo '$msg1='.$msg1.'
';
echo '$msg12='.$msg2;
}
call_user_func_array('fun',array('lamp','兄弟连'));结果:
$msg1=lamp
$msg12=兄弟连
4静态类函数和对象的方法回调
echo '
';
$arr = [199,1,24,789,213,123];
usort($arr,'myfun');
function myfun($x,$y){
return $y-$x;
}
print_r($arr);
结果:
Array
(
[0] => 789
[1] => 213
[2] => 199
[3] => 123
[4] => 24
[5] => 1
)$bianliang = 'myfun';
function myfun()
{
echo 'this is a function';
}
// myfun();
//$bianliang();
//自定义的回调函数
function show($func){
//myfun();
$func();
}
show('myfun');
结果:this is a function
7、递归函数
递归函数即自调用函数。
function jianfa($x){
//执行递减
$x--;
//输出传入的参数值
echo $x;
//如果$a大于零就继续调用函数本身
if($x > 0){
jianfa($x);
}else{
//如果不大于0就输出字符串
echo '<=====>';
}
//输出$a的值
echo $x;
}
jianfa($n);结果:
9876543210<=======>0123456789
8、匿名函数
1、它没有函数名
2,可以赋值给一个变量 $bianliang = function(参数)use(变量){//函数体};
3,所有回调函数中,回调参数位置都可以用匿名函数替代。
4,可以使用use直接调用外部的变量($arr),如果引用外部变量(&$arr),在内部可以更改外部的变量值
//1,第一种用法:将匿名函数数赋值给一个变量,调用的时候 $变量名(参数..);
$show = function($a){
echo '代码的处理';
echo $a;
};
$n = 15;
$show($n);$color = 'red';
$table = function($rows,$cols)use(&$color){
$color = 'green';
echo '
| '.($i*$cols+$n).' | ';
};
$table(10,10);
echo $color;
结果:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
| 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
| 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
| 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
| 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
| 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
green
&符,将内部的变量值把外部的变量改变
使用自定义函数库:
include();
require();
include(); require(); 语句是语言结构,不是真正的函数
//包含文件到当前的位置。而 include 只产生警告(E_WARNING),脚本会继续运行。
include '04table.php';
//包含文件到当前的位置。require 在出错时产生 E_COMPILE_ERROR 级别的错误。
require('04table.php');
echo table(5,5);
inculde_once();
require_once();
PHP相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile



