PSR-2-coding-style-guide
사용중단 - 2019-08-10을 기준으로 PSR-2은 사용이 중단되었습니다. 새로운 표준으로 PSR-12을 사용하시길 권장합니다.
이 가이드는 기본 코딩 표준인 PSR-1을 확장입니다.
이 가이드의 의도는 다른 저자의 코드를 볼 때 가독성을 해치는 것을 줄이는 것입니다. PHP 코드의 형식을 지정하는 방법에 대한 여러가지 규칙과 기대 사항을 나열함으로써 이를 달성합니다.
이 스타일 규칙은 다양한 회원 프로젝트 간의 공통점에서 파생되었습니다. 다양한 저자가 여러 프로젝트에서 공동 작업을 수행 할 때 모든 프로젝트 중에서 한 가지의 가이드을 사용하는 것이 도움이 됩니다. 따라서 이 가이드의 이점은 규칙 자체가 아니라 이러한 규칙을 공유하는 것입니다.
이 문서에서 핵심이 되는 단어는 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" 입니다. 이것은 RFC 2119에 설명 된대로 해석해야 합니다.
역자주: 위의 키워드는 아래의 번역문에 괄호안에 표시하였습니다
1. 개요
코드는 반드시(MUST) "코딩 스타일 가이드" PSR [PSR-1]을 따라야합니다.
코드는 들여쓰기에 반드시(MUST) 탭이 아니라 스페이스 4칸을 사용해야합니다.
한줄에 들어가는 문자열의 길이에 엄격한 제한이 있으면 안됩니다. 가벼운 제한은 한줄에 120자입니다 (MUST). 가능하다면 한줄은 80자 이하여야 합니다 (SHOULD).
namespace
선언 다음에 빈 줄이 하나 있어야만 하며(MUST) 그리고use
선언 블록 뒤에 빈 줄이 하나 있어야만 합니다 (MUST).클래스의 여는 중괄호는 다음 줄로 가야만 하며(MUST), 닫는 중괄호는 본문 뒤의 다음 줄로 가야만 합니다(MUST).
메서드의 여는 중괄호는 다음 줄로 가야만 하며(MUST), 닫는 중괄호는 본문 뒤의 다음 줄로 가야만 합니다(MUST).
모든 속성 및 메서드에서 가시성을 선언해야만 합니다 (MUST).
abstract
와final
은 가시성 (visibility) 전에 선언되어야만 합니다(MUST).static
은 가시성 뒤에 선언되어야만 합니다 (MUST).제어문 키워드는 그 뒤에 하나의 공백을 가져야만 합니다 (MUST). 메서드와 함수에서 해서는 안됩니다(MUST NOT).
역자주: if, switch, try, catch, foreach 등
제어문를 여는 중괄호는 같은 줄에 있어야만 하며(MUST), 닫는 중괄호는 반드시 본문 뒤의 다음 줄로 가야만 합니다(MUST).
제어문를 여는 괄호는 그 뒤에 공백이 없어야만 하며(MUST NOT), 제어문에 대한 닫는 괄호는 전에는 공백이 없어야만 합니다(MUST NOT).
1.1. 예제
이 예는 아래의 규칙 중 일부를 간략하게 설명합니다.
2. General
2.1. Basic Coding Standard
코드는 반드시(MUST) PSR-1에 요약 된 모든 규칙을 따라야합니다.
2.2. Files
모든 PHP 파일은 Unix LF (linefeed) 줄 끝을 사용해야합니다.
모든 PHP 파일은 하나의 빈 줄을 가진 채로 끝나야합니다.
닫는 ?>
태그는 PHP만 포함 된 파일일 경우 생략해야합니다 (MUST).
2.3. 라인 (Lines)
라인 길이에 엄격한 제한이 있어서는 안됩니다(MUST NOT).
라인 길이에 대한 소프트 제한은 120 자여야 합니다(MUST). 자동화 된 스타일 검사기는 반드시(MUST) 경고해야하지만 소프트 한도에서 오류를 표시해서는 안됩니다(MUST NOT).
라인은 80자를 넘지 않아야합니다 (SHOULD NOT). 그보다 긴 행은 각각 80 문자 이하의 여러 행으로 나눠 져야합니다 (SHOULD).
비어 있지 않은 라인 끝에는 공백 문자가 없어야합니다(MUST NOT).
가독성을 높이고 관련 코드 블록을 나타내기 위해 빈 라인을 추가 할 수 있습니다 (MAY).
한 라인에 하나 이상의 문장이 있어서는 안됩니다(MUST NOT).
2.4. 들여쓰기 (Indenting)
코드는 반드시(MUST) 4 스페이스의 들여쓰기를 사용해야하며, 들여쓰기에는 탭을 사용하지 않아야합니다(MUST NOT).
공백 만 사용하고 탭과 공백을 섞지 않으면 diff, 패치, 히스토리 및 주석 문제를 피할 수 있습니다. 공백을 사용하면 행간 정렬을 위해 세분화 된 하위 들여쓰기를 쉽게 삽입 할 수 있습니다.
2.5. 예약어(Keywords)와 True/False/Null
PHP 예약어는 소문자여야 합니다.
PHP 상수 true
,false
및 null
은 반드시(MUST) 소문자여야 합니다.
3. 네임 스페이스 및 사용 선언
네임스페이스가 존재할 때 namespace
선언 다음에 하나의 빈 라인이 있어야 합니다(MUST).
네임스페이스가 존재할 때, 모든 use
선언은 반드시 namespace
선언을 따라야 만합니다(MUST).
선언 하나당 하나의 use
키워드가 있어야합니다(MUST).
use
블록 뒤에 빈 줄이 하나 있어야합니다(MUST).
예제 :
4. 클래스, 프로퍼티(Properties) 및 메서드
"클래스"라는 용어는 모든 클래스, 인터페이스 및 trait을 나타냅니다.
4.1. 확장 및 구현
extends
와 implements
키워드는 클래스 이름과 같은 라인에서 선언되어야합니다 (MUST).
해당 클래스의 여는 중괄호는 자체 줄에 있어야합니다(MUST). 클래스의 닫는 중괄호는 본문 뒤의 다음 줄로 가야합니다(MUST).
implements
의 목록은 여러 줄에 걸쳐 나뉘어 질 수 있습니다. 각 줄은 한 번 들여쓰기를 합니다. 그렇게 할 때 목록의 첫 번째 항목은 다음 줄에 있어야하며 한 줄에 하나의 인터페이스만 있어야합니다.
4.2. 프로퍼티(Properties)
모든 프로퍼티에서 가시성을 반드시 선언해야합니다(MUST).
var
키워드는 프로퍼티를 선언하는데 사용되어서는 안됩니다 (MUST NOT).
명령문마다 하나 이상의 프로퍼티가 선언되어서는 안됩니다(MUST NOT).
프로퍼티 이름은 protected 또는 private 가시성을 나타내기 위해 하나의 밑줄이 붙어서는 안됩니다 (SHOULD NOT).
속성 선언은 다음과 같습니다.
4.3. Methods
모든 메서드는 가시성을 선언해야합니다 (MUST).
메서드 이름은 protected 또는 private 가시성을 표현하기 위해 하나의 밑줄로 접두어를 사용해서는 안됩니다 (SHOULD NOT).
메서드 이름은 메서드 이름 다음에 공백으로 선언하면 안됩니다 (MUST NOT). 여는 중괄호는 반드시 자신의 줄에 있어야하며(MUST) 닫는 중괄호는 반드시 그 다음 줄에 있어야합니다(MUST). 여는 괄호 뒤에 공백이 있으면 안되며(MUST NOT) 닫는 괄호 앞에 공백이 있어서는 안됩니다(MUST NOT).
메서드 선언은 다음과 같습니다. 괄호, 쉼표, 공백 및 중괄호의 배치에 유의하십시오.
4.4. 메서드 인수(Method Arguments)
인수 목록에는 각 쉼표 앞에 공백이 있으면 안되며(MUST NOT) 각 쉼표 뒤에 하나의 공백이 있어야합니다(MUST).
디폴트 값을 가진 메서드 인수는 인수 목록의 끝에 와야합니다 (MUST).
인수 목록은 여러 줄에 걸쳐 나뉘어 질 수 있으며(MAY), 각 줄은 한 번 들여 쓰일 수 있습니다. 그렇게 할 때 목록의 첫 번째 항목은 다음 줄에 있어야하며(MUST) 한 줄에 하나의 인수 만 있어야합니다(MUST).
인수 목록이 여러 줄에 걸쳐 분할되어 있으면 닫는 괄호와 여는 중괄호는 한 줄의 공백을 사용하여 각각의 줄에 함께 있어야합니다 (MUST).
4.5. abstract
, final
, and static
abstract
, final
, and static
abstract
와final
선언은 가시성 선언 앞에 와야합니다(MUST).
static
선언은 가시성 선언 뒤에 와야합니다(MUST).
4.6. 메소드(Method) 호출과 함수(Function) 호출
메서드 나 함수 호출을 할 때 메서드 나 함수 이름과 여는 괄호 사이에 공백이 없어야합니다(MUST NOT). 여는 괄호 뒤에 공백이 있으면 안되며(MUST NO) 닫는 괄호 앞에 공백이 있어서는 안됩니다(MUST NOT). 인수 목록에는 각 쉼표 앞에 공백이 있으면 안되며(MUST NOT) 각 쉼표 뒤에 하나의 공백이 있어야합니다(MUST).
인수 목록은 여러 줄에 걸쳐 나뉘어 질 수 있으며(MAY), 각 줄은 한 번 들여 쓰일 수 있습니다. 그렇게 할 때 목록의 첫 번째 항목은 다음 줄에 있어야하며(MUST) 한 줄에 하나의 인수 만 있어야합니다(MUST).
5. 제어문(Control Structures)
제어문의 일반적인 스타일 규칙은 다음과 같습니다.
제어문 키워드 다음에 하나의 공백이 있어야합니다 (MUST).
여는 괄호 뒤에 공백이 있으면 안됩니다 (MUST NOT).
닫는 괄호 앞에 공백이 없어야합니다 (MUST NOT).
닫는 괄호와 여는 중괄호 사이에 하나의 공백이 있어야합니다 (MUST).
구조체는 한 번 들여쓰기되어야합니다 (MUST).
닫는 중괄호는 제어문의 다음 줄에 있어야합니다 (MUST).
각 제어문는 중괄호로 묶어야합니다 (MUST). 이것은 구조가 어떻게 보이는지를 표준화하고, 새로운 라인이 제어문에 추가 될 때 오류가 발생할 가능성을 줄입니다.
5.1. if
, elseif
, else
if
, elseif
, else
if
구조는 다음과 같습니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오. else
와 elseif
는 이전 제어문의 닫는 중괄호와 같은 줄에 있습니다.
else if
키워드 대신 elseif
키워드를 사용하여 모든 제어 키워드가 단일 단어처럼 보이도록 해야 합니다 (SHOULD).
5.2. switch
, case
switch
, case
switch
구조체는 다음과 같습니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오. case
문은 switch
에서 한 번 들여쓰기되어야하며(MUST) break
키워드 (또는 다른 종결 키워드)는 case
문과 같은 수준에서 들여쓰기되어야합니다 (MUST). 비어 있지 않은 case
문에서 의도적으로 다음으로 넘기는 경우 // no break
와 같은 주석이 있어야합니다(MUST).
5.3. while
, do while
while
, do while
while
문은 다음과 같습니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오.
비슷한 경우로, do while 문은 다음과 같이 보입니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오.
5.4. for
for
for
문은 다음과 같이 보입니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오.
5.5. foreach
foreach
foreach
문은 다음과 같이 보입니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오.
5.6. try
, catch
try
, catch
try catch
블록은 다음과 같이 보입니다. 괄호, 공백 및 중괄호의 배치에 유의하십시오.
6. 클로저(Closures)
클로저는 function
키워드 뒤의 공백과 use
키워드 앞뒤 공백으로 선언해야합니다 (MUST).
여는 중괄호는 반드시 같은 줄에 있어야하며(MUST) 닫는 중괄호는 반드시 그 다음 줄에 있어야합니다(MUST).
인수 목록이나 변수 목록의 여는 괄호 다음에 공백이 있으면 안되며(MUST NOT) 인수 목록이나 변수 목록의 닫는 괄호 앞에 공백이 있으면 안됩니다(MUST NOT).
인수 목록과 변수 목록에는 각 쉼표 앞에 공백이 있어서는 안되며(MUST NOT) 각 쉼표 뒤에 하나의 공백이 있어야합니다(MUST).
기본값을 가진 클로저 인수는 인수 목록의 끝에 와야합니다 (MUST).
클로저 선언은 다음과 같습니다. 괄호, 쉼표, 공백 및 중괄호의 배치에 유의하십시오.
인수 목록과 변수 목록은 여러 행에 걸쳐 나뉘어 질 수 있습니다(MAY). 각 행은 한 번씩 들여쓰기됩니다. 그렇게 할 경우 첫 번째 항목은 다음 줄에 있어야만하며(MUST) 한 줄에 하나의 인수 또는 변수 만 있어야합니다(MUST).
마지막 리스트 (인수 또는 변수의 여부)가 여러 줄로 나뉘어 질 때, 닫는 괄호와 여는 중괄호는 하나의 공백을 사용하여 한줄에 있어야합니다 (MUST).
다음은 인수 목록이 있거나 없는 클로저의 예와 여러 줄에 걸쳐있는 변수 목록입니다.
형식 지정 규칙은 함수 또는 메소드 호출에서 클로저가 직접 인수로 사용될 때도 적용됩니다.
7. 결론
이 가이드에는 의도적으로 생략 한 스타일과 연습의 많은 요소가 있습니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다 :
전역 변수 및 전역 상수 선언
함수 선언
운영자 및 과제
라인 간 정렬
주석 및 문서 블록
클래스 이름 접두사 및 접미사
모범 사례
향후 권장 사항은 스타일이나 실습의 요소 또는 기타 요소를 다루기 위해이 가이드를 수정하고 확장 할 수 있습니다.
부록 A. 설문조사
이 스타일 가이드를 작성하면서이 그룹은 공통 실천을 결정하기 위해 회원 프로젝트에 대한 설문 조사를 실시했습니다. 조사는 후일을 위해 여기에 유지됩니다.
A.1. 설문조사 자료
A.2. 설문 조사 범례
indent_type
: 들여쓰기의 유형. tab
= "탭 사용", 2
또는 4
= "공백 개수"
line_length_limit_soft
: "소프트"줄 길이 제한 (문자 수). ?
= 식별 할 수 없거나 응답이 없으면 아니오
는 제한이 없음을 의미합니다.
line_length_limit_hard
: "하드"줄 길이 제한 (문자 수). ?
= 식별 할 수 없거나 응답이 없으면 아니오
는 제한이 없음을 의미합니다.
class_names
: 클래스 이름 지정 방법. lower
= 소문자 만, lower_under
= 밑줄 구분 기호가있는 소문자, studly
= StudlyCase.
class_brace_line
: 클래스의 여는 중괄호가 class 키워드와 같은
줄에 있거나, 그 다음
줄에 있습니까?
constant_names
: 클래스 상수는 어떻게 명명됩니까? upper
= 밑줄 구분자가있는 대문자.
true_false_null
: true
, false
및 null
키워드는 모두 lower
또는 모두 upper
로 철자가 맞습니까?
method_names
: 메소드은 어떻게 명명됩니까? camel
=camelCase
,lower_under
= 밑줄 구분 기호가있는 소문자.
method_brace_line
: 메소드의 여는 중괄호가 메소드 이름과 같은
줄 또는 다음
줄에 있습니까?
control_brace_line
: 제어문의 여는 중괄호가 같은
줄 또는 다음
줄에 있습니까?
control_space_after
: 제어문 키워드 다음에 공백이 있습니까?
always_use_control_braces
: 제어문은 항상 중괄호를 사용합니까?
else_elseif_line
: else
나elseif
를 사용할 때, 이전 닫는 중괄호와 같은
줄로 가야합니까, 아니면 다음
줄로 가나 요?
case_break_indent_from_switch
: switch
문에서 case
와 break
가 몇 번 들여 쓰여졌습니까?
function_space_after
: 함수 호출은 함수 이름 뒤에 여는 괄호 앞에 공백이 있습니까?
closing_php_tag_required
: PHP 만 포함 된 파일에서 닫는 ?>
태그가 필요합니까?
line_endings
: 어떤 유형의 종료 라인이 사용됩니까?
static_or_visibility_first
: 메서드를 선언 할 때 static
이 먼저 오는가, 아니면 가시성이 먼저 오는가?
control_space_parens
: 제어 구조 표현식에서 여는 괄호 뒤에 공백이 있고 닫는 괄호 앞에 공백이 있습니까? yes
=if ( $expr )
,no
=if ($expr)
입니다.
blank_line_after_php
: 여는 PHP 태그 뒤에 빈 줄이 있습니까?
class_method_control_brace
: 클래스, 메서드 및 컨트롤 구조에 대해 여는 중괄호가 어떤 줄로 표시되는지 요약합니다.
A.3. 설문조사 결과
Last updated