PHP配列の例が末尾のコンマを残すのはなぜですか?


80

私は次のような例を見てきました:

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

ただし、実際には、末尾のコンマを常に残しているわけではありません。私は何か間違ったことをしているのですか、それともこれは単に「別の」方法ですか?フレームワークを使用している場合、末尾のコンマがコード生成に悪影響を与えることはありませんか?他の言語(Java、C ++)の配列宣言でも末尾のコンマが使用されているのを見たことがあるので、末尾のコンマを残す理由はPHPに固有のものではないと思いますが、これは私の興味をそそりました。


1
PHPでトレーニングコンマを残したときに、解析エラーが発生することを誓った可能性があります。
Lotus Notes

それは可能だと思います。この特定の例では、問題なく解析されます。
ashurexm 2010年

ええ@LotusNotes私も以前にエラーがあったと確信しています。しかし、明らかに、もうありません!
Meezaan-ud-Din 2015

回答:


109

PHP配列の例が末尾のコンマを残すのはなぜですか?

彼らができるからです。:)配列状態のPHPマニュアルエントリ

最後に定義された配列エントリの後に末尾のコンマを付けることは、珍しいことですが、有効な構文です。

真剣に、これは完全に便宜のためであるため、最初に最後のエントリに末尾のコンマを追加しなくても、配列に別の要素を簡単に追加できます。

他の言語と言えば:JavaScriptではこれに注意してください。一部の古いブラウザはエラーをスローしますが、新しいブラウザでは通常エラーが発生します。


1
これは私が考えたものです、私は何かでボートを逃したかどうかはわかりませんでした。これを可能にするいくつかの言語で時間を過ごす人々にとって、それはおそらくまともな習慣だと思います。しかし、私はさまざまな言語を扱っており、JavaScript(および他の言語を知っている人)がエラーをスローする可能性があることを考えると、末尾にコンマを残さないという習慣を続ける方が安全かもしれません。
ashurexm 2010年

7
現在、明示的に許可するためのIE6 / 7コードよりも新しいバージョンのJavaScript。
staticsan 2010年

9
Perlは末尾のコンマも許可しており、推奨されていると思います。ソース管理を使用して開発者間でコードを共有する場合、実際には非常に便利です。末尾に行を追加する必要があり、カンマを追加する必要がある場合は、両方の行に触れていることを意味します。A git blame(または他のソース管理の同等のもの)は、コンマを追加しただけでも、その行を書き込んだことを示します。どちらにしても大したことではありませんが、便利です。
redbmk 2012

2
変更された行の数を少なく保つために、ソース管理下にあるファイルがある場合に役立ちます。
hakre 2012年

6
JSONも、JSONは末尾のコンマを嫌います。
カイルホッチキス

27

これは、複数行で配列を定義する場合の良い習慣です。また、ZendFrameworkのコーディング標準によっても推奨されています

この後者の宣言を使用するときは、配列の最後の項目に末尾のコンマを使用することをお勧めします。これにより、連続する行に新しい項目を追加することによる影響が最小限に抑えられ、コンマの欠落による解析エラーが発生しないようにすることができます。


23

バージョン管理(git)を使用しているときに、配列に1つ追加し、末尾にコンマがない場合、前の行にコンマを追加する必要があるため、2行を変更したように見えることに気付きました。これは見栄えが悪く、ファイルの変更を見ると誤解を招く可能性があることがわかりました。このため、末尾のコンマは良いことだと思います。


そして、それは間違いなく、末尾のコンマが理由です:)差分の一貫性
Ninj 2017年

それがなぜそこにあるのかと関係があるのか​​どうかはわかりません。私はそうは思わないでしょう。しかし、私はそれが便利だと思います。
user985366 2017

しかし、それはある、それはここにいる理由。次の行の追加の間違いを防ぐためにここにあると言うことができます。しかし、そうではありません。今日のIDEでは、commなしで行を追加できないため、エラー通知が表示されます。
ninj 2017

@Ninj興味深い。私はあなたの最初のコメントを皮肉だと思ったが、確信が持てなかった。
user985366 2017

1
申し訳ありませんが、皮肉に見えた可能性があります。とても大変でした。バージョン管理の差分をクリーンにするために、最後の配列行にコンマを追加します。
NINJ

8

エントリを均一に保つためです。

順序を入れ替えたり、エントリを追加または削除したりする必要がある場合は、末尾にコンマを残すことができると非常に便利です。

最後の要素にコンマを含めることができない場合は、エントリを変更して最後のコンマを維持する必要があります。エントリを交換または変更する意図はすでに達成されているため、これは無意味な演習であり、時間と指のストロークの無駄です。

最後の要素の末尾にコンマを付けることで、プログラマーはこの煩わしくて無駄な詳細に気を配る必要がなくなります。


6

その理由は、変更をコミットすることです。

新しい要素を追加するときに末尾のコンマを追加する必要がある場合。1行を変更し、1行を追加します。(-++)

カンマがすでに上の行にあるときに新しい要素を追加するとき。追加された行は1つだけで、変更された行はありません。(+)


5

他の人のことを話すことはできませんが、通常、コードの末尾にコンマを残します。後で配列に追加する場合、以前の最後の行にコンマを追加するのを忘れたためにコンマを見逃す心配がないためです。


4

許可されていても、関数とループの最後のセミコロンを省略するのは悪い習慣だと思います。


3

新しい配列要素を追加する際の構文エラーを回避するのに役立つため、常に末尾のコンマを使用しています...これは良い習慣です。


3
これを復活させて申し訳ありませんが、末尾のコンマは後で構文エラーをどのように防ぐのですか?PHPで末尾のコンマが許可されていることがわかりましたが、その使用法を確認/見つけることができません。後で新しいインデックスを追加することは、引き続き$arr[] = ...
ダニエル

@Daniel、彼は後でソースコードに戻り、配列リテラルに別の行を追加することについて話しています。
Sam Dufel 2013年

1

roundcubeファイル構成(config.inc.php)の例を見ると、末尾にコンマがある場合とない場合の例があります。

この配列は、どのプラグインを有効または無効にするかを定義します。

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve',
'password',
'archive',
'zipdownload',
);
...

通常、これは1行ずつ行われ、誰かが配列に何かを追加したい場合は、次のようにすることができます。

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve', //code by personA
'password', //code by personA
'archive', //code by personA
'zipdownload', //code by personA
'newplugin', //new code by personB
);
...

したがって、このコードをコミットすると、その特定の行の変更が1つだけ表示され、その特定の行のコード変更を誰が行っているかを調べると、より読みやすくなります。

別のコード行では、コンマを末尾に付けずにこれを確認できます。

...
$config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'INBOX.spam', 'Trash');
...

通常、このコードが頻繁に変更されることを誰も予想しない1行のコードになります。

別の言葉で:

1)アレイがオプションまたは構成ファイルとして使用され、将来動的に変更する必要がある場合は、末尾にコンマを付けます。さらに、末尾のコンマを使用してプログラムでその配列に変更を加える場合は、1行のコードにのみ変更を加えますが、それがないと、2行のコードを処理する必要があり、配列の解析がより複雑になる可能性があります。

2)配列が定数配列であり、将来変更されることが予想されない場合は、末尾のコンマを入力する必要はありませんが、Accepted Answerで述べられているように、末尾のコンマを入力できますが、目的はありません。


0

これは最近私を驚かせました、しかしそれは理にかなっています。私は長い間、同じことを達成する以前の規則に固執しようとしました。それは、各エントリの最後ではなくに区切りコンマを置くことです。

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

カンマもすべてそのように並んでいるので見栄えがしますが、インデントが少し厄介になる可能性があります。たぶんその理由で、それは何年にもわたってあまり普及していないようで、私は他の人に私がなぜそれをするのかと尋ねられました。PHPのソリューションは良い妥協案だと思いますが、いずれにせよ、今では明らかに受け入れられているソリューションです。


0

新しいエントリの先頭には常にカンマを追加しました。コンパイラーは、これを「もう1つ来る」という先読みの1文字のトークンと見なします。最近のコンパイラがLR(1)(左再帰、単一トークン先読み)を使用しているかどうかはわかりませんが、コンマの後に何もない場合に構文エラーが発生するのはここだと思います。他の開発者に同意してもらうことはめったにありませんが、JohnBrookingのようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.