コールバック、匿名関数、および閉パッケージ
15263 ワード
(1) is_callable転送された値を検出するためにcall_user_funcまたはarray_walkなどの関数は、非常にスマートで、配列をテストすることができます.配列形式の有効なコールバックは、オブジェクトを最初の要素とし、方法名を2番目の要素とし、array('new SomeClass()','someFunc')に似ています.
次に例を用いて説明する.
出力:
出力:
(2) array_walkは、配列内の各要素にユーザー定義関数を適用します.
例:
次に例を用いて説明する.
1 function a(){
2
3 }
4
5 $a = 'a';
6
7 if(is_callable($a)){
8
9 echo 'a is callable
';
10
11 } else {
12
13 echo 'a is not callable
';
14
15 }
出力:
1 a is callable
1 class B{
2
3 public function add($arg = []){
4
5 echo 'sum: ' . ($arg[0] + $arg[1]) . '
';
6
7 }
8
9 }
10
11 $c = [new B(), 'add'];
12
13 if(is_callable($c)){
14
15 call_user_func($c, [1, 2]);
16
17 }
出力:
1 sum: 3
(2) array_walkは、配列内の各要素にユーザー定義関数を適用します.
例:
1 $array = [1, 2, 3];
2
3 function show($v, $k, $u){
4
5 $v += 1;
6
7 echo "u: {$u}, k: {$k}, v: {$v}
";
8
9 }
10
11 array_walk($array, 'show', 'Jerry');
12
13 echo '';
14
15 print_r($array);
この では、array_walk の のパラメータは 、2 のパラメータはコールバック 、3 はユーザカスタムパラメータであり、この ではshow の のパラメータは $arrayの 、2 のパラメータは $arrayのキー またはインデックス、3 のパラメータはユーザーカスタムパラメータであり、array_に するwalkの3 のパラメータは、この では のように されます. 1 u: Jerry, k: 0, v: 2
2 u: Jerry, k: 1, v: 3
3 u: Jerry, k: 2, v: 4
4
5 Array
6
7 (
8
9 [0] => 1
10
11 [1] => 2
12
13 [2] => 3
14
15 )
show の が した に の $arrayの を に する は、show の のパラメータの に& アドレス を します. は のとおりです. 1 $array = [1, 2, 3];
2
3 function show(&$v, $k, $u){
4
5 $v += 1;
6
7 echo "u: {$u}, k: {$k}, v: {$v}
";
8
9 }
10
11 array_walk($array, 'show', 'Jerry');
12
13 echo '';
14
15 print_r($array);
$vの を し、 $arrayの を することで、 : 1 u: Jerry, k: 0, v: 2
2 u: Jerry, k: 1, v: 3
3 u: Jerry, k: 2, v: 4
4
5 Array
6
7 (
8
9 [0] => 2
10
11 [1] => 3
12
13 [2] => 4
14
15 )
(3) call_user_funcは、その のパラメータをコールバック として し、 りのパラメータをコールバック のパラメータとして します. 1 function d($a, $b, $c){
2
3 echo "a: {$a}, b: {$b}, c: {$c}
";
4
5 }
6
7 $f = 'd';
8
9 if(is_callable($f) && function_exists($f)){
10
11 call_user_func($f, 'Kue', 'Sub', 'Dod');
12
13 }
:1 a: Kue, b: Sub, c: Dod
(4) create_functionは を し、 のパラメータは のパラメータであり、2 のパラメータは の である.1 $n = create_function('$a, $b', 'return $a + $b;');
2
3 echo $n(1,2).'
';
:3
ここで、この で しなければならないのは、2 のパラメータ が した 、プラス を れないでください.1 Parse error: syntax error, unexpected '}', expecting ';' in : runtime-created function on line 1
(5)PHP 5.3 、createを するにはもっと い があります.functionの 、これがインライン の です.1 $e = function($arg){
2
3 echo "arg: {$arg}
";
4
5 };
6
7 $e('Hello world!');
これはインライン の な い です.この では、 が するにはセミコロンで する があります.1 arg: Hello world!
(6) パッケージuse 1 function message($m){
2
3 $close = 'door';
4
5 $h = function($m) use(&$close, $m){
6
7 echo "{$m} close the {$close} please!
";
8
9 $close = 'nali';
10
11 };
12
13 $h('Lily');
14
15 echo $close.'
';
16
17 }
18
19 echo call_user_func('message', 'Jim');
:1 Jim close the door please!
2
3 nali
use $close $h , $close & , $close , & ,$close 。