Callback / Callable ����

�� PHP 5.4 ����� callable ����ָ���ص����� callback�����ĵ�����ͬ������ʹ�� callback ������Ϣ��

һЩ������ call_user_func() �� usort() ���Խ����û��Զ���Ļص�������Ϊ�������ص�������ֹ�����Ǽ򵥺������������Ƕ���ķ�����������̬�෽����

����

PHP�ǽ�������string��ʽ���ݵġ� ����ʹ���κ����û��û��Զ��庯�������������Խṹ���磺array()��echo��empty()��eval()��exit()��isset()��list()��print �� unset()��

һ����ʵ������ object �ķ�������Ϊ array ���ݣ��±� 0 ������ object���±� 1 ������������ ��ͬһ��������Է��� protected �� private ������

��̬�෽��Ҳ�ɲ���ʵ��������Ķ�������ݣ�ֻҪ���±� 0 �а������������Ƕ����� PHP 5.2.3 ��Ҳ���Դ��� 'ClassName::methodName'��

������ͨ���û��Զ��庯���⣬Ҳ�ɴ��� �������� ���ص�������

Example #1 �ص�����ʾ��

<?php 

// An example callback function
function my_callback_function() {
    echo 
'hello world!';
}

// An example callback method
class MyClass {
    static function 
myCallbackMethod() {
        echo 
'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass''myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
who() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::who')); // A

// Type 6: Objects implementing __invoke can be used as callables (since PHP 5.3)
class {
    public function 
__invoke($name) {
        echo 
'Hello '$name"\n";
    }
}

$c = new C();
call_user_func($c'PHP!');
?>

Example #2 ʹ�� Closure ��ʾ��

<?php
// Our closure
$double = function($a) {
    return 
$a 2;
};

// This is our range of numbers
$numbers range(15);

// Use the closure as a callback here to 
// double the size of each element in our 
// range
$new_numbers array_map($double$numbers);

print 
implode(' '$new_numbers);
?>

�������̻������

2 4 6 8 10

Note:

�ں�����ע���ж���ص�����ʱ(��ʹ�� call_user_func() �� call_user_func_array())������ǰһ���ص�����δ������쳣�����Ľ����ٱ����á�