web-dev-qa-db-fra.com

Pourquoi PHP Exemples de tableaux laisse une virgule de fin?

J'ai vu des exemples comme les suivants:

$data = array(
   'username' => $user->getUsername(),
   'userpass' => $user->getPassword(),
   'email' => $user->getEmail(),
);

Cependant, dans la pratique, j'ai toujours pas laissé la virgule de fin. Suis-je en train de faire quelque chose de mal, ou est-ce juste "une autre" façon de le faire? Si j'utilisais un framework, la virgule de fin n'affecterait-elle pas négativement la génération de code? J'ai vu l'utilisation de virgules de fin dans les déclarations de tableaux dans d'autres langages (Java, C++), donc je suppose que les raisons de laisser des virgules de fin ne sont pas spécifiques à PHP, mais cela a piqué mon intérêt.

75
ashurexm

Pourquoi PHP Exemples de tableaux laisse une virgule de fin?

Parce qu'ils le peuvent. :) Le entrée manuelle PHP pour le tablea indique:

La présence d'une virgule de fin après la dernière entrée de tableau définie, bien qu'inhabituelle, est une syntaxe valide.

Sérieusement, cela est entièrement pour plus de commodité, vous pouvez donc facilement ajouter un autre élément au tableau sans avoir à ajouter d'abord la virgule de fin à la dernière entrée.

En parlant d'autres langues: soyez prudent avec cela en JavaScript. Firefox tolérera indulgemment les virgules de fin; Internet Explorer générera, à juste titre, une erreur.

92
Pekka 웃

Il s'agit d'une bonne pratique lors de la définition d'un tableau sur plusieurs lignes. Il est également encouragé par les normes de codage de ZendFramework :

Lorsque vous utilisez cette dernière déclaration, nous vous encourageons à utiliser une virgule de fin pour le dernier élément du tableau; cela minimise l'impact de l'ajout de nouveaux éléments sur les lignes successives et aide à garantir qu'aucune erreur d'analyse ne se produit en raison d'une virgule manquante.

22
Janci

J'ai remarqué en travaillant avec le contrôle de version (git) que si nous ajoutons 1 chose à un tableau et que nous n'avons pas la virgule de fin, il semblerait que nous ayons modifié 2 lignes parce que la virgule devait être ajoutée à la ligne précédente. Je trouve que cela semble mauvais et peut être trompeur lorsque l'on regarde les changements de fichier, et pour cette raison, je pense qu'une virgule de fin est une bonne chose.

20
user985366

Parce qu'il garde les entrées uniformes.

Si vous avez dû échanger la commande, ajouter ou supprimer des entrées, vous savez qu'il est très pratique de laisser une virgule de fin.

Si le dernier élément ne peut pas avoir de virgule, vous finissez par devoir conserver la dernière virgule en modifiant les entrées. C'est un exercice inutile et une perte de temps et de caresses car l'intention d'échanger ou de modifier des entrées est déjà accomplie.

En permettant une virgule de fin sur le dernier élément, cela libère le programmeur d'avoir à s'occuper de ce détail ennuyeux et stérile.

7
ahnbizcad

Je pense que même si cela est autorisé, c'est une mauvaise pratique, c'est comme laisser de côté le dernier point-virgule de vos fonctions et boucles.

4
Skelly1983

Je ne peux pas parler pour les autres, mais je laisse généralement une virgule de fin dans mon code. Je le fais parce que si/quand j'ajoute plus tard au tableau, je n'ai pas à me soucier de manquer une virgule en oubliant d'ajouter une virgule à ce qui était auparavant la dernière ligne.

4
Peter Horne

La raison en est la validation des modifications.

Si vous devez ajouter la virgule de fin lors de l'ajout d'un nouvel élément. Vous changez 1 ligne et ajoutez 1 ligne. (- ++)

Lors de l'ajout d'un nouvel élément lorsqu'une virgule est déjà dans la ligne ci-dessus. Il n'y a qu'une seule ligne ajoutée et aucune n'a été modifiée. (+)

4
Yani

Je fais toujours des virgules de fin car cela aide à éviter les erreurs de syntaxe lors de l'ajout de nouveaux éléments de tableau ... c'est juste une bonne pratique.

3
Kirzilla

Cela m'a surpris récemment, mais cela a du sens. J'ai longtemps essayé d'adhérer à une convention antérieure qui accomplit la même chose, qui est de mettre la virgule de séparation devant de chaque entrée plutôt qu'à la fin.

$data = array(
   'username' => $user->getUsername()
 , 'userpass' => $user->getPassword()
 , 'email' => $user->getEmail()
);

Les virgules s'alignent également de cette façon, ce qui est joli, mais cela peut rendre le retrait un peu gênant. Peut-être pour cette raison, cela ne semble pas avoir beaucoup progressé au fil des ans, et d'autres m'ont demandé pourquoi je le fais. Je suppose que la solution de PHP est un bon compromis, et en tout cas, c'est apparemment la solution acceptée maintenant.

0
JohnBrooking

J'ai toujours ajouté des virgules au début de la nouvelle entrée. Les compilateurs le voient comme le jeton d'anticipation à un seul caractère qui dit "il y en a un autre à venir". Je ne sais pas si les compilateurs modernes utilisent LR (1) (à gauche, récursif, à jeton unique), mais je pense que c'est de là que vient l'erreur de syntaxe lorsqu'une virgule n'a rien après. Il est rare qu'un autre développeur soit d'accord avec moi, mais il semble que JohnBrooking le fasse!

0
Bill Hedge