php函数

php 函数

什么是函数?

就是在项目开发过程中。有些代码会被重复利用。咱们手动把那块重复使用的代码提出来做成公共的代码。共团队开发成员使用。这个咱们手动封装的那块代码段,就是函数。

为什么使用函数?

1、提高代码使用率

2、减少开发时间

3、减少代码冗余

4、可维护性高

5、方便调试代码

定义

1
2
3
4
5
6
function 函数名(param1 = value1(默认值), param2 = value2...)  //形参
{
//函数体

return //返回值
}

调用

1
函数名(param1 = value1, param2 = value2); //实参

函数定义的注意事项

1、函数定义使用function关键字

2、function 函数名(参数列表){函数体}

3、函数名不区分大小写,变量名严格区分

4、如果形参有默认值, 调用时可以不传实参,函数使用的就是形参的默认值

5、如果形参没有默认值,在调用时就必须传入实参

6、函数的定义和调用顺序没有关系,可以先调用后定义

7、先要函数有返回值,就必须用return

8、函数可以重复使用

分类

类库函数

PHP定义好的函数

is_null();
is_array();
...

自定义函数

根据自己的需求自己定义的函数

函数关键字

function

函数名命名规范

与变量命名规范类似:

1、函数名不区分大小写变量严格区分大小写

2、函数名字使用英文

3、不能用数字打头可以写在中间或者结尾

4、不能使用特殊符号

5、可以使用下划线

6、命名要有意义

7、遵循驼峰命名法

8、不能使用系统给保留的关键字

参数与返回值

默认参数

1、默认参数就是函数定义时小伙好里带有赋值的变量

2、如果定义的形参,并且没有默认值,那么在调用时就必须传入实参

3、形参带有默认值,要放在参数列表的后面

4、在形参有默认值时,调用时传入了实参,实参会覆盖形参的默认值

返回值

关键字:return

1、return后的代码不会执行,直接跳出函数

2、如果需要多个返回值,就用数组去搞

3、调用时接到的值就是函数的返回值

代码示例

没有参数,没有返回值

1
2
3
4
function show()
{

}

有参数,没有返回值

1
2
3
4
5
6
function say($name  = '孔维民', $age = 18 , $sex = '男')
{
echo '姓名'.$name.'<br />';
echo 'age'.$age.'<br />';
echo 'sex'.$sex.'<br />';
}

有参数,有返回值

1
2
3
4
5
6
7
8
function show($name = 'name' , $age = 'age' , $sex = 'sex')
{
echo 'name:'.$name.'<br />';
echo 'age:'.$age.'<br />';
echo 'sex:'.$sex.'<br />';

return '我是函数返回值';
}

作用域

就是一个变量的作用范围,又称生命周期

函数变量

内部变量

就是函数内部声明的变量,作用域为函数体内部,函数结束后自动销毁(垃圾回收机制)

外部变量

就是函数体外声明的变量

命名尽量不要和内部变量相同

超全局变量

内部变量和外部变量是一个变量

常见的有:

1
2
3
4
5
6
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$GLOBALS

注意:

1
$var = $GLOBALS['var'];

函数体内对变量的操作不会影响函数体外

1
global $var;

函数体外变量的值会被函数体内的操作改变

1
global $var; 等价于 $var = &$GLOBALS['var'];

静态变量

关键字:static

静态变量只会初始化一次,在运行时会记录上一次的值,并且不会被销毁

1
2
3
4
5
6
7
8
9
10
11
function total()
{
static $num = 1;
$num++;

echo $num.'<br />';
}

total(); 2
total(); 3
total(); 4

use 关键字

使用外部变量的关键字

1
2
3
4
5
6
7
8
9
function show ($name) use ($age)
{
echo 'name:'.$name.'<br />';
echo 'age:'.$age.'<br />';
}

$name = '张三';
$age = 18;
show($name);

注:

1
2
global $var;
$var = $GLOBALS['var'];

也能实现使用外部变量的的效果

内部函数

函数体内又定义了一个函数,在重复调用时会报重复定义内部函数的错误

解决这个错误的办法

1、使用静态变量

2、函数是否被定义

1
function_exists()

3、函数是否可以被调用

1
is_callable()

类型约束

约束参数

1
2
3
4
function sum(int $n1 , int $n2)
{
return $n1 + $n2;
}

约束返回值

1
2
3
4
5
function sum($num1 , $num2) : string
{
echo $num1 + $num2;
return '12';
}

严谨模式

1
declare(strict_types=1);

注:只有php7支持

引用传参

使用引用传参后,函数体外的变量的值会随着函数体内的变化而变化

1
2
3
4
5
6
7
8
9
function sum(&$num2)
{
$num2 = 18;
echo $num2;
}

$num1 = 12;
sum($num1); // 18
echo $num1 // 18

可变参数

1
2
3
4
5
6
7
8
9
10
function kebian()
{
$sum = 0;
for ($i = 0; $i < func_num_args(); $i++) {
$sum += func_get_arg($i);
}
return $sum;
}

echo kebian(1,2,3,4,5,6,7,8,9);

获取所有实参的值,并以数组格式返回

1
func_get_args();

根据你传入的下标(键)获取对应的值

1
func_get_arg();

获取所有实参的总个数

1
func_num_args();

注:php7新特性

1
2
3
4
5
6
function test(...$arr)
{
var_dump($arr);
}

test(1,2,3,4,5,6);

也可以这样写

1
2
3
4
5
6
function test($a  , $b  , $c)
{
var_dump($a , $b , $c);
}

test(...[1,2,3]);

变量函数

把函数名赋值给一个变量

1
2
3
4
5
6
7
8
9
10
function calc($num1, $num2, $func)
{
return $func($num1, $num2);
}

$result = calc(10, 15, function ($a, $b) {
return $a + $b;
});

echo $result;

回调函数

变量函数的变形,可以通过回调,把一些复杂的功能一一拆分

1
call_user_func('',[]);

最简单的一个回调函数,第一个参数是函数名, 如果调用的函数有形参,在回调函数参数列表继续传实参

匿名函数

没有名字的函数,通过函数赋值的方法去调用,也被称为闭包

1
2
3
4
5
6
7
$func = function($person)
{
echo $person;
};

$xiaoming = '小明';
echo $func($xiaoming);

文件包含

如果包含出错 报警告错误 后续代码继续执行 一般情况使用include

1
include 'file_src';

如果包含出错 报致命错误 后续代码不执行

1
require 'file_src';

如果包含出错 报警告错误 后续代码继续执行

1
include_once 'file_src';

如果包含出错 报致命错误 后续代码不执行

1
require_once 'file_src';

_once在执行包含的时候 先检测一下是否被包含过了,如果被包含过了,再次包含报错

递归

递归就是包子馅的包子。它的极限是馒头。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function demo($n)
{
echo $n.'<br/>';

if($n > 0) {
demo($n - 1);
} else {
echo '------<br>';
}

echo $n.'<br/>';
}

demo(5);