php很多函数都支持回调函数例如:array_udiff,array_usort回调函数函数需要传入一个callback类型当作他的参数,官方文档里面明确指出了6种支持的回调函数参数传入方式。 1.普通的全局方法 2.对象的方法,传入数组当作参数 3.静态方法调用,传入数组当作参数 4
php很多函数都支持回调函数例如:array_udiff,array_usort…回调函数函数需要传入一个callback类型当作他的参数,官方文档里面明确指出了6种支持的回调函数参数传入方式。
1.普通的全局方法
2.对象的方法,传入数组当作参数
3.静态方法调用,传入数组当作参数
4.静态方法调用,传入字符串当作参数
5.父类的普通方法
6.闭包或者说匿名方法
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 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?php
function my_callback_function() {
echo 'hello world!' ;
}
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!' ;
}
}
call_user_func( 'my_callback_function' );
call_user_func( array ( 'MyClass' , 'myCallbackMethod' ));
$obj = new MyClass();
call_user_func( array ( $obj , 'myCallbackMethod' ));
call_user_func( 'MyClass::myCallbackMethod' );
class A {
public static function who() {
echo "A\n" ;
}
}
class B extends A {
public static function who() {
echo "B\n" ;
}
}
call_user_func( array ( 'B' , 'parent::who' ));
$double = function ( $a ) {
return $a * 2;
};
$numbers = range(1, 5);
$new_numbers = array_map ( $double , $numbers );
print implode( ' ' , $new_numbers );
?>
|
Copy after login
这些都是在类的外部调用匿名函数,当我们想在类的内部调用一个属于本类的方法的时候该怎么办呢?
这时候我们可以使用$this
1 2 3 4 5 6 7 8 9 10 | <?php class MyClass {
public $property = 'Hello World!' ;
public function MyMethod(){
call_user_func( array ( $this , 'myCallbackMethod' ));
}
public function MyCallbackMethod(){
echo $this ->property;
}
}
?>
|
Copy after login
以前我曾愚蠢的在一个单独类文件里面头部或者尾部定义一个全局方法来搞定这个事情,后来才发现原来可以这样调用,希望对大家有帮助。
这个调用方式在官方文档下面的评论里面有人给出,
原文地址:php回调函数, 感谢原作者分享。