2017-07-08 3 views
1

J'ai une fonction de comparaison dans une classe de service dans l'espace de noms:Le passage d'un alias de classe à usort

Company\Product\Services\Specific

que j'importer à mon contrôleur comme:

use Company\Product\Service\Specific as SpecificService;

Je un tableau que je souhaite trier dans cette classe de contrôleur:

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

Cependant, cela déclenche mon autoloader, qui recherche un littéral de classe SpecificService, qui n'existe pas. Je peux cependant contourner ce:

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

Je suis pointilleux et que vous voulez utiliser mon pseudonyme. Comment?

Répondre

1

Oui, vous pouvez faire quelque chose comme ceci:

use SomeNamespace\String\Tools as StringTools; 

puis, à l'intérieur de votre méthode:

$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); 

En supposant que:

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

et il est dans un espace de noms SomeNamespace\String\Tools as StringTools; .

De cette façon, votre chargeur automatique devrait fonctionner correctement

Si la méthode est pas statique, vous allez devoir instancier le classs dans la fonction Anonymus

+0

semble tellement évident maintenant. Merci pour votre réponse. – jschavey