传递一个Class Alias来使用

时间:2017-07-08 23:24:19

标签: php alias autoload usort

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

Company\Product\Services\Specific

我导入控制器,如:

use Company\Product\Service\Specific as SpecificService;

我有一个数组,我想在这个Controller类中排序:

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

但是,这会使我的自动加载器运行起来,它会搜索不存在的类文字SpecificService。但是,我可以解决这个问题:

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

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

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做:

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;命名空间中。

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

如果方法不是静态的,那么你将不得不在anonymus函数中实例化类