2010-12-09 60 views
0

Quel est le meilleur et pourquoi:php accès progamiticly fonctions statiques

call_user_func(array($class, $method), $params); 

ou

$class::$method($params); 

la seconde approche ne fonctionne que dans PHP 5.3. Je suis dans une virsion plus ancienne en lançant une erreur fatale inattendue T_PAAMAYIM_NEKUDOTAYIM. (mon ide pense que c'est une erreur de syntaxe, aussi, mais cela fonctionne)

+1

Ma compréhension est que les deux approches se traduira par la même approche d'exécution efficace pour appeler la fonction, et doivent effectuer à peu près la même chose. – cdhowie

+0

Dès que votre question contient les mots «ce qui est mieux», vous devriez consulter http://programmers.stackexchange.com pour les réponses. – Stephen

+0

Aussi, la seconde seulement peut faire des méthodes qui prennent des paramètres comme un tableau d'éléments. Le premier peut accéder à des méthodes qui prennent n'importe quel type de paramètres. Ce qui devrait être plus facile à lire dans la classe. – DampeS8N

Répondre

3

Eh bien, si la portabilité est importante pour vous, alors la réponse évidente que vous devriez utiliser en premier lieu. Si vous savez que vous ciblez toujours au moins PHP 5.3, vous devriez utiliser la méthode que vous vous sentez le plus à l'aise. Le $class::$method($params); est plus court et plus propre, donc j'y vais moi-même.

1

Les deux sont très bien. À mon avis, le second est plus clair sur le plan syntaxique. Comme vous l'avez dit, le seul inconvénient est qu'il faut plus de 5,3.

+0

D'accord - à mon avis, il est plus lisible. – Hamish

0

Avec PHP 5.3.0, il y a aussi la fonction forward_static_call(), bien qu'il y ait un peu plus de restrictions à son utilisation