如何在 laravel 5 回调

How to callback in laravel 5

我有这段代码: App\Helpers;

class LowestLoadedServer {
    public static function getServer($video)
    {
        $pliki = $video->files()->with('server')->get();
        $aPliki = array();
        foreach($pliki as $plik)
        {
            $aPliki[] = $plik;
        }
        usort($aPliki, 'LowestLoadedServer::sortByLoadASC');
        return $aPliki[0]->server;
    }

    public static function sortByLoadASC($a, $b)
    {
        if($a->server->load > $b->server->load) return 1;
        if($a->server->load < $b->server->load) return -1;
        return 0;
    }
}

我的错误是:

usort() expects parameter 2 to be a valid callback, class 'App/Helpers/LowestLoadedServer' not found

我有两种不同的想法..

第一个是你试过的那个,但是你应该指定你的 class 的完整命名空间或者简单地使用 self 关键字:

usort($aPliki, "App\Helpers\LowestLoadedServer::sortByLoadASC");

usort($aPliki, "self::sortByLoadASC");

第二个是用class和函数传递一个数组:

usort($aPliki, ["App\Helpers\LowestLoadedServer", 'sortByLoadASC']);

usort($aPliki, ['self', 'sortByLoadASC']);

试试这个解决方案:

class LowestLoadedServer {
public static function getServer($video,Closure $callback)
{
    $pliki = $video->files()->with('server')->get();
    $aPliki = array();
    foreach($pliki as $plik)
    {
        $aPliki[] = $plik;
    }
    usort($aPliki,$callback);
    return $aPliki[0]->server;
}

public static function sortByLoadASC($a, $b)
{
    if($a->server->load > $b->server->load) return 1;
    if($a->server->load < $b->server->load) return -1;
    return 0;
}
}

并像这样传递回调函数:self::sortByLoadASC 没有引号。