02.function

goer ... 2022-01-07 Php
  • Php
大约 2 分钟

函数

[toc]

# 函数

定义一个功能和方法

function sum($a,$b=40){  //形参,和默认值
	return $a+$b;		//return 返回值
}
echo sum(10,30);

// PHP的函数名禁止重名,包括内置函数和自定义函数
1
2
3
4
5
6

函数作用域

函数内部和外部是两个世界,外面的变量和里面的变量完全没有关系

和js区别很大

// 函数里面访问不了外面,外面也不能访问里面

//1.如果函数外部变量放到函数内部使用

//a.传参
$a = 10;
function aa($can){
    echo $can+1;
}
aa($a);  //$a传入函数

//b global :声明变量可以在函数内部使用
$a = 10;
function aa($can){
    global $a;   //声明变量
    echo $can+1;
}
aa();  //$a传入函数


// 2.里面的变量放到外面只能靠 return
function f1(){
    $a = 100;
    return $a;
}
$b = f1(); 

// 3.静态变量 ;调用一次函数变量会执行一次
function f2(){
    static $i=0;
    $i++;
    echo $i;
}
f2();  //1
f2();  //2
f2();  //3
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

# 函数库

将所有的函数单独方瑞一个文件内,这个文件就是函数库

引入函数库的方法(引入php文件的方法)

include() //路径   即使引用错误,也不会影响下面代码的继续输出
   
require()  //路径  引入错误,会终止页面所有代码继续执行

//为了避免重复引入产生的报错,可以使用include_once和require_once来代替
// 可以引入多个 include_once() require_once()
1
2
3
4
5
6

# 递归函数

重复调用自己

// 累加
fucntion addSup($num){
   if($sum == 1){
       return 1;
   }else{
       return $num+addSup($num-1);
   }
}

addSum(10); //10的累加
1
2
3
4
5
6
7
8
9
10

# 回调函数

就算是把函数当参数传入


echo addSup(10); //55
// 10 9 8 7 6 5 4 3 2 1 

function addSub($a,$b,$fun){
    return $a+$b+$fun($b); //把上面的函数当参数传入
}

echo addSub(1,10,'addSup'); //66

1
2
3
4
5
6
7
8
9
10

# 变量函数

可变函数仅仅是可变变量的一个变种、变形表达。

// 变量的变量
$($b);

function dome(){
    echo 'googog';
}

$fun = 'demo';
$fun();   //这样就可以调用了
//  可以用于以后的MVC
1
2
3
4
5
6
7
8
9
10

# 匿名函数

也就是没有函数名的函数 直接调用

$hello = function($name){
    echo $name."欢迎你";
}; //分号一定要有

$hello("kangkang");

1
2
3
4
5
6

# 内部函数

内部函数,是指在函数内部又声明了一个函数。

function supbox(){
    echo "i'am supbox";
    
    function subbox(){
        echo "i'am subbox";
    }
}

// 必须先调用最外层的函数,才能调用内部函数
supbox();

subbox();
1
2
3
4
5
6
7
8
9
10
11
12

# 闭包函数

php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。

1 减少foreach的循环的代码
2 减少函数的参数
3 解除递归函数
4 关于延迟绑定
1
2
3
4
//关键字就只有use,use意思是连接闭包和外界变量

$mes = 'hello';
$res = function() use ($mes){
    var_dump($mes);
}
// 这样我们不能改变传入的参数
$res();
$mes = 'word';
$res(); // 值不会变



$res = function() use (&$mes){ //加一个&符
    var_dump($mes);
}
//这有重复改变值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17