如何在 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
没有引号。
我有这段代码: 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
没有引号。