PHP 배열 예제가 뒤에 쉼표를 남기는 이유는 무엇입니까?


80

다음과 같은 예를 보았습니다.

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

그러나 실제로 나는 항상 후행 쉼표를 남기지 않았습니다 . 내가 뭔가 잘못하고있는 건가요, 아니면 그냥 '또 다른'방식인가요? 프레임 워크를 사용하는 경우 후행 쉼표가 코드 생성에 부정적인 영향을주지 않습니까? 다른 언어 (Java, C ++)에서도 배열 선언에서 후행 쉼표를 사용하는 것을 보았습니다. 따라서 후행 쉼표를 남기는 이유는 PHP에만 국한된 것이 아니라고 가정합니다.


1
PHP에서 훈련 쉼표를 남겼을 때 구문 분석 오류가 발생한다고 맹세 할 수있었습니다.
Lotus Notes

가능합니다. 이 특정 예제에서는 잘 구문 분석됩니다.
ashurexm

그래 @LotusNotes 나는 이전에도 오류가 있었을 것이라고 확신합니다. 그러나 더 이상은 아닙니다!
Meezaan-ud-Din

답변:


109

PHP 배열 예제가 뒤에 쉼표를 남기는 이유는 무엇입니까?

그들이 할 수 있기 때문입니다. :) 배열 상태에 대한 PHP 매뉴얼 항목 :

마지막으로 정의 된 배열 항목 뒤에 쉼표가있는 것은 드문 경우이지만 유효한 구문입니다.

진지하게, 이것은 전적으로 편의를위한 것이므로 마지막 항목에 후행 쉼표를 먼저 추가하지 않고도 배열에 다른 요소를 쉽게 추가 할 수 있습니다.

다른 언어에 대해 말하기 : JavaScript에서주의하십시오. 최신 브라우저에서는 일반적으로 허용하지만 일부 오래된 브라우저에서는 오류가 발생합니다.


1
이것이 내가 생각한 것입니다. 나는 무언가에 보트를 놓치고 있는지 확실하지 않았습니다. 이것을 허용하는 몇 가지 언어로 시간을 보내는 사람들에게는 아마도 괜찮은 습관 일 것입니다. 그러나 내가 많은 다른 언어를 다루고 있고, 자바 스크립트 (그리고 다른 언어를 아는 사람)가 오류를 던질 수 있다고 말했듯이 후행 쉼표를 남기지 않는 습관을 계속하는 것이 더 안전 할 수 있습니다.
ashurexm

7
IE6 / 7 코드보다 최신 버전의 JavaScript는 이제 명시 적으로 허용합니다.
staticsan

9
Perl은 또한 후행 쉼표를 허용하며 권장한다고 생각합니다. 소스 제어를 사용하여 개발자간에 코드를 공유 할 때 실제로 가지고있는 것이 매우 좋습니다. 끝에 줄을 추가하고 쉼표를 추가해야하는 경우 두 줄을 모두 터치한다는 의미입니다. A git blame(또는 다른 소스 제어에서 이와 동등한 것)는 방금 쉼표를 추가 했음에도 불구하고 해당 행을 작성했음을 표시합니다. 어느 쪽이든 큰 거래는 아니지만 편리합니다.
redbmk

2
변경된 줄의 수를 낮게 유지하기 위해 소스 제어하에 파일이있는 경우 유용합니다.
hakre

6
JSON도 JSON은 후행 쉼표를 싫어합니다.
Kyle Hotchkiss 2014

27

이것은 여러 줄에 배열을 정의 할 때 좋은 방법입니다. 또한 ZendFramework의 코딩 표준에 의해 권장됩니다 .

후자의 선언을 사용할 때 배열의 마지막 항목에 후행 쉼표를 사용하는 것이 좋습니다. 이렇게하면 연속 행에 새 항목을 추가 할 때의 영향이 최소화되고 쉼표 누락으로 인한 구문 분석 오류가 발생하지 않습니다.


23

버전 제어 (git)로 작업 할 때 배열에 하나를 추가하고 후행 쉼표가 없으면 이전 행에 쉼표를 추가해야했기 때문에 2 행을 수정 한 것처럼 보입니다. 나는 이것이 나쁘게 보이고 파일 변경 사항을 볼 때 오해의 소지가 있다는 것을 알았습니다. 이런 이유로 나는 후행 쉼표가 좋은 것이라고 생각합니다.


그리고 이것이 바로 후행 쉼표가 왜 다음을위한 것인지입니다. :) Diff consistency
Ninj

왜 거기에 있는지와 관련이 있는지 모르겠습니다. 나는 그렇게 생각하지 않을 것이다. 하지만 유용하다고 생각합니다.
user985366

그러나 그것은 이다 가 여기에 이유는. 다음 줄 추가에서 실수를 방지하기 위해 여기에 있다고 말할 수 있습니다. 그러나 그렇지 않습니다. 현재 어떤 IDE도 쉼없이 줄을 추가 할 수 없기 때문에 오류 알림이 표시됩니다.
Ninj

@Ninj 흥미 롭습니다. 나는 당신의 첫 번째 코멘트를 아이러니하다고 생각했지만 확실하지 않았습니다.
user985366

1
죄송합니다. 아이러니하게 보일 수 있습니다. 매우 심각했습니다. 마지막 배열 줄에 쉼표를 추가하여 버전 비교를 깔끔하게 정리합니다.
Ninj

8

항목을 균일하게 유지하기 때문입니다.

주문을 바꾸거나 항목을 추가 또는 삭제해야했다면 후행 쉼표를 남길 수있는 것이 매우 편리하다는 것을 알고 있습니다.

마지막 요소에 쉼표가있을 수없는 경우 항목을 수정하여 마지막 쉼표를 유지해야합니다. 항목을 바꾸거나 수정하려는 의도가 이미 달성 되었기 때문에 무의미한 운동이며 시간과 손가락 스트로크 낭비입니다.

마지막 요소에 후행 쉼표를 허용함으로써 프로그래머가이 성 가시고 결실없는 세부 사항을 처리하지 않아도됩니다.


6

그 이유는 커밋 변경입니다.

새 요소를 추가 할 때 후행 쉼표를 추가해야하는 경우. 한 줄을 변경하고 한 줄을 추가합니다. (-++)

쉼표가 이미 위 줄에있을 때 새 요소를 추가 할 때. 추가 된 줄은 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',
);
...

일반적으로 이것은 한 줄씩 진행되며 누군가가 배열에 무언가를 추가하려는 경우 다음을 수행 할 수 있습니다.

...
// 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
);
...

따라서이 코드를 커밋 할 때 특정 행에 대한 변경 사항이 하나만 표시되며 해당 행의 코드를 변경하는 사람을 검사 할 때 더 읽기 쉽습니다.

다른 코드 줄에서는 뒤에 쉼표없이 이것을 볼 수 있습니다.

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

일반적으로 아무도이 코드가 자주 변경 될 것으로 예상하지 않는 한 줄의 코드입니다.

다시 말해서 :

1) 배열이 향후 동적으로 변경되어야하는 옵션 또는 구성 파일로 사용되는 경우 후행 쉼표를 넣으십시오. 게다가 후행 쉼표를 사용하여 프로그래밍 방식으로 배열을 변경하면 한 줄 코드 만 변경하는 반면, 코드가 없으면 두 줄의 코드를 처리해야하며 이로 인해 배열 구문 분석이 더 복잡해질 수 있습니다.

2) 배열이 상수 배열이고 앞으로 변경 될 것으로 예상하지 않는 경우 후행 쉼표를 넣을 필요가 없지만 Accepted Answer에서 언급했듯이 후행 쉼표를 넣을 수는 있지만 목적이 없습니다


0

최근에는 놀랐지 만 말이됩니다. 나는 똑같은 일을 수행하는 이전의 규칙을 고수하려고 오랫동안 노력해 왔습니다. 즉, 각 항목의 끝이 아니라 앞에 구분하는 쉼표를 넣는 것입니다.

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

쉼표도 모두 그렇게 정렬되어 멋지게 보이지만 들여 쓰기가 약간 어색 할 수 있습니다. 아마도 그 이유 때문에 수년 동안 많이 잡히지 않은 것 같고 다른 사람들이 왜 그렇게하는지 묻습니다. 나는 PHP의 솔루션이 좋은 타협이라고 생각하며 어쨌든 지금은 분명히 받아 들여지는 솔루션입니다.


0

나는 항상 새 항목의 시작 부분에 쉼표를 추가했습니다. 컴파일러는 이것을 "또 다른 것이 올 것"이라고 말하는 미리보기의 단일 문자 토큰으로 간주합니다. 현대 컴파일러가 LR (1) (왼쪽 재귀, 단일 토큰 미리보기)을 사용하는지 모르겠지만 쉼표 뒤에 아무것도 없을 때 구문 오류가 발생한다고 생각합니다. 다른 개발자가 저에게 동의하는 경우는 드물지만 JohnBrooking이 동의하는 것 같습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.