将 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;
命名空间中。
这样,您的自动加载器应该可以正常工作
如果方法不是静态的,您将不得不在匿名函数中实例化类
我在命名空间的服务 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;
命名空间中。
这样,您的自动加载器应该可以正常工作
如果方法不是静态的,您将不得不在匿名函数中实例化类