2017-03-07 1 views
0

Je sais que c'est une question bizarre, mais j'ai une méthode statique déclarée comme ceci:PHP - passer un argument et le pré-transformer dans la même ligne?

public static function getCountForTypesByModificationYear($year, $filter = null) { 
    $filter["modification year"] = $year; 
    return self::getCountForTypes($filter); 
} 

Il prend un argument (un an) et, le cas échéant, un tableau associatif avec des options de filtrage supplémentaires. La première ligne garantit que le tableau $filter a une seule clé modification year (que je fournis en premier argument) et la seconde lance la méthode avec la requête SQL pour compter les résultats potentiels pour les filtres sélectionnés.

Ils sont assez explicites et simple pour mes besoins, mais je suis en train de deviner s'il y a un moyen de rendre ces deux lignes dans un une doublure SANS avoir recours à des fonctions telles que array_merge_recursive() ou call_user_func().

Est-ce que cela peut être réduit?

Répondre

1

Si tout ce que vous aimez est de le faire dans une ligne, vous pouvez essayer le ci-dessous:

public static function getCountForTypesByModificationYear($year, $filter = null) { 
    return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null); 
} 

Cependant, je ne suis pas sûr si ce sera une meilleure performance sage.

Sinon, vous pouvez aussi le faire,

return self::getCountForTypes(["modification year" => $year] + $filter); 
+0

Je suis ok avec la performance qu'il a en ce moment, donc je vais essayer de la seconde. Merci! :) –

+0

La deuxième approche est ce dont j'avais besoin. C'est presque 5% plus rapide pour tous les cas de test! Je te dois une bière;) –

+0

Je suis content de pouvoir aider, Deuil: D –

1

Vous pouvez le faire uniquement par un appel de fonction, comme la fonction array_merge. Expression comme ($filter['xx']=123) retour valeur opérande côté droit

public static function getCountForTypesByModificationYear($year, $filter = null) 
{ 
    return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year])); 
} 

également dans votre exemple, si vous n'utilisez pas « tableau » de type pointe et définissez $filter valeur par défaut null - vous devez vous assurer que $filter est un tableau

public static function getCountForTypesByModificationYear($year, $filter = null) 
{ 
    if(!is_array($filter)) throw new \InvalidArgumentException(); 
    return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year])); 
}