閉包的基本用法

一個封閉的 PHP 相當於一個匿名函式的,如。一個沒有名字的函式。即使技術上不正確,閉包的行為仍然與函式相同,只有一些額外的功能。

閉包只不過是 Closure 類的一個物件,它通過宣告一個沒有名字的函式來建立。例如:

<?php

$myClosure = function() {
    echo 'Hello world!';
};

$myClosure(); // Shows "Hello world!"

請記住,$myClosureClosure 的一個例項,以便你瞭解你可以真正做到的事情(參見 http://fr2.php.net/manual/en/class.closure.php

你需要一個 Closure 的經典案例就是你必須給一個函式提供一個 callable,例如 usort

下面是一個示例,其中陣列按每個人的兄弟數量排序:

<?php

$data = [
    [
        'name' => 'John',
        'nbrOfSiblings' => 2,
    ],
    [
        'name' => 'Stan',
        'nbrOfSiblings' => 1,
    ],
    [
        'name' => 'Tom',
        'nbrOfSiblings' => 3,
    ]
];

usort($data, function($e1, $e2) {
    if ($e1['nbrOfSiblings'] == $e2['nbrOfSiblings']) {
        return 0;
    }
    
    return $e1['nbrOfSiblings'] < $e2['nbrOfSiblings'] ? -1 : 1;
});

var_dump($data); // Will show Stan first, then John and finally Tom