一、介绍

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(​​callback​​)参数的值。当然,也有其它应用的情况。

二、使用场景

1、动态调用静态类的时候


1

2

3

4

5

6

7

8

9

10



​<?php​

​class​​ ​​test​

​{​

​public​​ ​​static​​ ​​function​​ ​​getinfo()​

​{​

​var_dump(func_get_args());​

​}​

​}​

​call_user_func(​​​​array​​​​(​​​​'test'​​​​, ​​​​'getinfo'​​​​), ​​​​'hello world'​​​​);​


2、在callback函数中使用


1

2

3

4

5

6

7

8



​<?php​

​//eg array_walk array_map preg_replace_callback etc​

​echo​​ ​​preg_replace_callback(​​​​'~-([a-z])~'​​​​, ​​​​function​​ ​​(​​​​$match​​​​) {​

​return​​ ​​strtoupper​​​​(​​​​$match​​​​[1]);​

​}, ​​​​'hello-world'​​​​);​

​// 输出 helloWorld​

​?>​


3、赋值给一个普通的变量


1

2

3

4

5

6

7

8

9



​<?php​

​$greet​​ ​​= ​​​​function​​​​(​​​​$name​​​​)​

​{​

​printf(​​​​"Hello %s\r\n"​​​​, ​​​​$name​​​​);​

​};​

​$greet​​​​(​​​​'World'​​​​);​

​$greet​​​​(​​​​'PHP'​​​​);​

​?>​


 4、使用use从父域中继承


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20



​<?php​

​$message​​ ​​= ​​​​'hello'​​​​;​

​// 继承 $message​

​$example​​ ​​= ​​​​function​​ ​​() ​​​​use​​ ​​(​​​​$message​​​​) {​

​var_dump(​​​​$message​​​​);​

​};​

​echo​​ ​​$example​​​​();​

​// Inherit by-reference​

​$example​​ ​​= ​​​​function​​ ​​() ​​​​use​​ ​​(&​​​​$message​​​​) {​

​var_dump(​​​​$message​​​​);​

​};​

​echo​​ ​​$example​​​​();​

​// The changed value in the parent scope​

​// is reflected inside the function call​

​$message​​ ​​= ​​​​'world'​​​​;​

​echo​​ ​​$example​​​​();​


 5、传递参数


1

2

3

4

5



​<?php​

​$example​​ ​​= ​​​​function​​ ​​(​​​​$arg​​​​) ​​​​use​​ ​​(​​​​$message​​​​) {​

​var_dump(​​​​$arg​​ ​​. ​​​​' '​​ ​​. ​​​​$message​​​​);​

​};​

​$example​​​​(​​​​"hello"​​​​);​


 6、OO中的使用


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



​<?php​

​class​​ ​​factory{​

​private​​ ​​$_factory​​​​;​

​public​​ ​​function​​ ​​set(​​​​$id​​​​,​​​​$value​​​​){​

​$this​​​​->_factory[​​​​$id​​​​] = ​​​​$value​​​​;​

​}​

 

​public​​ ​​function​​ ​​get(​​​​$id​​​​){​

​$value​​ ​​= ​​​​$this​​​​->_factory[​​​​$id​​​​];​

​return​​ ​​$value​​​​();​

​}​

​}​

​class​​ ​​User{​

​private​​ ​​$_username​​​​;​

​function​​ ​​__construct(​​​​$username​​​​=​​​​""​​​​) {​

​$this​​​​->_username = ​​​​$username​​​​;​

​}​

​function​​ ​​getUserName(){​

​return​​ ​​$this​​​​->_username;​

​}​

​}​

​$factory​​ ​​= ​​​​new​​ ​​factory();​

​$factory​​​​->set(​​​​"zhangsan"​​​​,​​​​function​​​​(){​

​return​​ ​​new​​ ​​User(​​​​'张三'​​​​);​

​});​

​$factory​​​​->set(​​​​"lisi"​​​​,​​​​function​​​​(){​

​return​​ ​​new​​ ​​User(​​​​"李四"​​​​);​

​});​

​echo​​ ​​$factory​​​​->get(​​​​"zhangsan"​​​​)->getUserName();​

​echo​​ ​​$factory​​​​->get(​​​​"lisi"​​​​)->getUserName();​


7、函数中的调用


1

2

3

4

5

6

7

8



​<?php​

​function​​ ​​call(​​​​$callback​​​​){​

​$callback​​​​();​

​}​

​call(​​​​function​​​​() {​

​var_dump(​​​​'hell world'​​​​);​

​});​