将 Class 别名传递给 usort

Passing a Class Alias to usort

我在命名空间的服务 class 中有一个比较函数:

Company\Product\Services\Specific

我将其导入到我的控制器中,例如:

use Company\Product\Service\Specific as SpecificService;

我有一个数组,希望在此控制器中排序 class:

usort ($array, 'SpecificService::sortFunction()');

但是,这会使我的自动加载器跳闸,自动加载器搜索不存在的 class 文字 SpecificService。但是,我可以解决这个问题:

usort ($array, 'Company\Product\Services\Specific::sortFunction()');

我很挑剔,想使用我的别名。怎么样?

是的,你可以这样做:

use SomeNamespace\String\Tools as StringTools;

然后,在您的方法中:

$arr  = ['a', 'c', 'e', 'b'];
$func = function ($a, $b) {
    return StringTools::cmp($a, $b);
    // or
    // $st = new StringTools();
    // return $st->cmp($a, $b);
    // if cmp isn't static
};
usort($arr, $func);

假设:

public static function cmp($a, $b)
{
    // do comparison here
    return strcmp($a, $b);
}

它位于 SomeNamespace\String\Tools as StringTools; 命名空间中。

这样,您的自动加载器应该可以正常工作

如果方法不是静态的,您将不得不在匿名函数中实例化类