回调函数、匿名函数&闭包
回调 (callbacks)
比如usort(array &$array , callable $compareFunc)
第一个参数为数组,第二个参数是回调方法
使用方法:
usort($arr, 'mySortFunc');
//回调方法在对象中
usort($arr, array($objectName, 'mySortFunc'));
//回调方法在类的静态方法里
usort($arr, array('ClassName', 'mySortFunc'));
usort($arr, array('ClassName::mySortFunc'));
//通过子类调用父类中的方法(很少用)
usort($arr, array('Child', 'parent::mySort'));
匿名函数方式
usort($arr, function($a, $b) {
return $b - $a;
匿名函数和闭包(Anonymous functions & Closures)
示例:
注意use关键是使用外部变量,相当于复制一份变量值,当掉后面改变变量值时,匿名函数内部的变量值不会发生改变
$string = "Hello World!\n";
$closure = function() use ($string) {
echo $string;
};
$string = "Hello China\n";
$closure();
结果:
Hello World!
示例
函数返回的闭包
$string = "Hello China\n";
function getPrinter(&$string) {
return function() use($string) {
echo $string;
};
}
$printer = getPrinter($string);
$string = "Hello Cat\n";
$printer();
结果:
Hello China
回调函数相关的函数:
<?php
function test($str) {
echo $str;
}
echo is_callable('test');
call_user_func('test', 'param1');
call_user_func_array('test', ['param1']);
is_callable—检测参数是否为合法的可调用结构
call_user_func—把第一个参数作为回调函数调用
call_user_func_array—调用回调函数,并把一个数组参数作为回调函数的参数
Last updated
Was this helpful?