回调函数、匿名函数&闭包

回调 (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