2009-04-16 9 views
37

Un point mineur sur les mots-clés de déclaration de fonction en PHP: Si vous avez une méthode de classe statique, le mot-clé static doit-il précéder ou après le mot-clé visibilité (public, protected, private)? En supposant que toutes vos méthodes, statiques ou autrement, un mot-clé de la visibilité, alors vous voulez que le mot-clé de la visibilité de rester au même endroit par rapport au mot-clé function:"public static" ou "public static"?

public function foo() {} 

public function bar() {} 

protected function baz() {} 

private function quux() {} 

Maintenant, faire croire à un couple sont statiques:

public function foo() {} 

static public function bar() {} 

protected function baz() {} 

static private function quux() {} 

en outre, si une méthode est statique, vous voulez que pour être la première chosevu, parce que cela a un impact plus important sur ce type de méthode est que même le mot-clé de la visibilité ne.

Ce qui est strictement une question de lisibilité, car il a de toute évidence aucune conséquence fonctionnelle ou conception. (Que je peux penser.)

Répondre

43

langages comme Java et C# exigent que le modificateur d'accès sont d'abord siEdit: La ligne précédente frappe est complètement faux. Aucune des deux langues n'a cette exigence.


public static 

semble correct pour moi. Les arguments peuvent être faits pour les deux approches et la mienne est la suivante: Puisque « statique » qualifie la fonction plutôt que le modificateur d'accès, il est plus logique de dire

<access_modifier> static 

Si vous utilisez l'inverse le sens de « statique "est moins clair.

+1

* Ni * Java * ni * C# ne l'exigent. Je crois qu'ils * le recommandent, mais "public static" est valide dans les deux langues. (Je viens de compiler un programme de test pour vérifier.) –

+1

(Annuler mon downvote cependant, comme le reste est assez juste - et je suis certainement d'accord que "public static" semble plus raisonnable.) –

+0

Yikes! Mon erreur - vous avez raison! –

9

Je ne pense pas que ce soit une question strictement PHP, et pour peu qu'il vaut la peine, je l'ai toujours préféré la consistance de placer le modificateur de visibilité en premier. Je trouve plus facile à numériser.

5

Je place la visibilité d'abord dans toutes les langues que j'utilise et qui ont des modificateurs de type.

1

Vous avez raison, cela n'a aucun effet sur le code. Par conséquent, c'est à vos propres exigences de style, ou à celles de votre équipe, de décider de ce que vous faites. Consultez-les et convenez d'un style.

Si vous codez pour vous seul, alors vous devriez choisir pour vous-même. Le choix n'est pas important, mais la cohérence est.

Une autre question que vous pouvez vous poser est: devriez-vous utiliser 'public' ou non? Pour des raisons de compatibilité ascendante (aucune information ne se cache dans PHP4), tout élément sans modificateur de visibilité est public par défaut. Devriez-vous écrire publiquement si c'est public? Encore une fois choix personnel: faire un argument solide de toute façon et vous me convaincrez que votre choix est le meilleur.

Personnellement, quand je vais à travers et nettoyer mon propre code, je tiens à mettre le modificateur de visibilité d'abord, et préciser, même si elle est publique.

+3

J'ai envisagé d'omettre «public» car c'est techniquement redondant, mais je trouve qu'il vaut mieux être explicite. De cette façon, quand je reviens à mon code six mois plus tard, je n'ai pas à me demander pourquoi il n'y a pas de mot clé access sur la méthode foo(); Est-ce que j'ai oublié d'en mettre un là-bas, ou est-ce que je voulais dire que c'était public? – dirtside

+0

bon point ☻ – thomasrutter

5

Je préfère static public depuis cette façon, il est plus facile de repérer [généralement] rares méthodes statiques dans les classes.

+0

J'allais écrire ceci comme réponse. Je suis entièrement d'accord. –

10

En complément de Alexei Tenitski's answer.

I prefer static public since this way 
it is easier to spot [usually rare] static methods in classes. 

Toutes les méthodes doivent avoir leur visibilité spécifiée. Donc, nous savons que chaque méthode va avoir mentionné quelque part dans la définition, la seule question est "Quel est le paramètre?".

Seuls certains sont statiques - donc, pour chacun d'eux nous devons demander "Y at-il une mention du mot-clé statique quelque part dans la définition?". Donc, mettez le statique d'abord pour rendre la réponse à cette question plus évidente. Ou, en règle générale, ... J'ai tendance à mettre «l'aspect le plus extraordinaire d'abord» pour ne pas inconsciemment sauter des choses en les lisant. ; o)

Essayez ce test.

Très rapidement ... Combien y a-t-il de méthodes statiques dans la classe A?

class A { 
public static methodA() { 
    } 
protected static methodB() { 
    } 
private staticlymethodC() { 
    } 
} 

et combien de méthodes statiques y a-t-il dans la classe B?

class B { 
public methodA() { 
    } 
static protected methodB() { 
    } 
static private methodC() { 
    } 
} 

Je pense que la classe B est beaucoup plus facile à comprendre rapidement.

+6

Le même argument peut être fait pour les modificateurs d'accès ... –

+0

@ aW-k9IdI'-I0llwlg'I - Je ne comprends pas ce que vous voulez dire. Vous ne pouvez pas inverser l'argument pour les modificateurs d'accès - "Toutes les méthodes doivent avoir leur visibilité spécifiée, seules certaines méthodes ont une indication d'état statique". –

33

De PSR-2:

La visibilité doit être déclarée sur toutes les propriétés et méthodes; le résumé et DOIT être déclaré avant la visibilité; static DOIT être déclaré après la visibilité. [reference]

... si vous êtes intéressé par la norme et les conventions du groupe PHP Interop Framework.

Donc public static pas static public d'après eux.

+0

Une citation plus complète: "La visibilité DOIT être déclarée sur toutes les propriétés et méthodes, le résumé et la finale DOIVENT être déclarés avant la visibilité, la statique DOIT être déclarée après la visibilité." [source] (http://www.php-fig.org/psr/psr-2/) –

+2

Je veux dire, ne préconisent-ils pas aussi de mettre {{'sur de nouvelles lignes tout à eux-mêmes? brute .. – Eva

+2

@Eva Uniquement pour les déclarations de méthode et de classe. Pour les boucles et conditionnels, etc., ils recommandent de les placer à la fin de la ligne après un espace: http: //www.php-fig.org/psr/psr-2/Personnellement, je trouve cela beaucoup plus facile à lire que de placer toutes les accolades à la fin de la ligne. –

Questions connexes