網站製作學習誌

記錄學習製作網站的一切

PHP 的 Callback 虛擬型態

PHP 提供了一種很有趣的虛擬型態 (Pseudo-type) : callback ,它其實是字串或陣列組成。主要用來處理一些有不容易寫死在程式裡的函式名稱。

它可以是以下寫法:

1
2
3
4
5
6
// 呼叫函式,相當於 functionName();
'functionName'
// 呼叫類別靜態方法,相當於 className::methodName();
array ('className', 'methodName');
// 呼叫物件方法,相當於 $object->methodName();
array ($object, 'methodName');

例如:

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
$ary = array (
    'abc',
    'def',
    'ghi',
    array (
        '123',
        '456',
        '789',
    ),
);
function doSomething(& $v)
{
    $v = 'f : ' . $v;
}
class TestClass
{
    public function doSomething(& $v)
    {
        $v = 'c : ' . $v;
    }
}
$test = new TestClass();
var_dump(call_user_func('doSomething', 123));
var_dump(call_user_func(array ('TestClass', 'doSomething'), 123));
var_dump(call_user_func(array ($test, 'doSomething'), 123));
array_walk_recursive($ary, 'doSomething');
var_dump($ary);
array_walk_recursive($ary, array ('TestClass', 'doSomething'));
var_dump($ary);
array_walk_recursive($ary, array ($test, 'doSomething'));
var_dump($ary);
?>

Comments