[KO]PHP 코딩 스타일

Jangwook Kim
6 min readFeb 19, 2020

공통된 코딩 스타일을 가지고 있다는 것이 협업에 있어서 매우 도움이 된다는 사실은 이미 널리 알려져 있습니다. 하지만 불행하게도, 저는 혼자서 일을 하고 있기 때문에 그 중요성에 대해 인지하지 못하고 있었습니다.

저의 레거시 코드를 리팩토링 하기로 결정하였을 때, 저는 굉장히 더러운 코드(일정한 코딩 규칙이 없는 코드라고 할 수 있죠.)를 발견하게 되었습니다. 그렇기 때문에 저는 PHP 코딩 스타일에 대해 공부를 해보자 결심하게 되었습니다.

PSR-1: 기본 코딩 규칙

PHP의 기본 코딩 규칙에 대해서는 RFC 2119 에 기술되어져 있습니다.

  1. PHP 코드에는 <?php & <?= 태그만(MUST) 사용할 수 있습니다.
  2. PHP 코드는 반드시(MUST) UTF-8 without BOM 형식으로 작성되어야 합니다.
  3. 파일은 무언가를 선언하거나 (클래스, 함수, 상수 등) 또는 사이드이펙트의 원인이 되는(예 : 출력 생성, .ini 설정 변경 등) 형태로 작성해야하지만(SHOULD) 둘 모두를 수행하면 안됩니다(SHOULD NOT).
  4. 네임스페이스와 클래스는 반드시(MUST) PSR-0: Autoloading Standard & PSR-4: Autoloader 규칙을따라야 합니다.
  5. 클래스는 반드시(MUST) PascalCase(StudlyCaps)로 선언해야 합니다.
  6. 클래스의 상수는 반드시(MUST) ALL_CAPS_SNAKE_CASE로 선언해야 합니다.
  7. 메소드는 반드시(MUST) camelCase로 선언되어야 합니다.

PSR-12: 확장된 코딩 스타일

PSR-12는 PSR-2의 확장이므로, PSR-2를 대체합니다. 확장된 코딩 스타일 대해서도 RFC 2119에 설명되어 있습니다.

굉장히 많은 규칙이 PSR-12에 규정되어 있으므로 이번 포스트에서는 제가 사용하게 될 것 같은 일반적인 규칙 위주로 작성하도록 하겠습니다. 자세한 내용은 위의 링크를 확인해 주시길 바랍니다.

Files

  1. 모든 PHP 파일은 반드시(MUST) Unix LF 개행 문자를 사용하여야 하며 반드시(MUST) 하나의 LF로 파일을 끝내야 합니다.
  2. 파일에 PHP 코드만이 작성되어 있는 경우 클로징 태그(?>)는 반드시(MUST) 생략되어야 합니다.

Lines

  1. 한 줄의 길이는 80 문자를 초과하면 안됩니다(SHOULD NOT).
  2. 줄의 끝에는 빈 공백(trailing white space)가 있어서는 안됩니다(MUST NOT).
  3. 가독성의 향상을 위해 특별히 금지된 경우가 아니라면 공백 줄을 추가하여야 합니다(MAY).
  4. 한 줄에 하나 이상의 문장을 입력하여서는 안됩니다(MUST NOT).

Indenting

  1. 반드시(MUST) 4개의 스페이스로 들여쓰기를 해야 합니다.
  2. 들여쓰기를 위해 탭을 이용하여서는 안됩니다(MUST NOT).

Keywords and Types

  1. 모든 예약된 키워드와 타입은 반드시(MUST) 소문자로 사용하여야 합니다.
    TRUE 대신 true를 사용하여야 합니다.
  2. 반드시(MUST) 짧은 타입의 키워드를 사용해야 합니다.
    boolean 대신bool을 사용하여야 합니다.

Declaration

  1. 선언 문장(declare)은 반드시(MUST) 스페이스가 포함되지 않아야 합니다.
    declare(strict_types=1)
  2. 코멘트나 문장이 닫힘 중괄호(}) 뒤에 위치하면 안됩니다(MUST NOT).
  3. 클래스를 새로 인스턴스화 할 경우(new), 소괄호(())는 반드시(MUST) 작성하여야합니다.
    new TestClass();
  4. extendsimplements는 반드시(MUST) 클래스명과 같은 라인에 위치해야 합니다.

Regards of Classes

  1. 트레이트를 사용할 때 use 키워드는 반드시(MUST) PHP 오픈 태그 뒤에 위치해야 하며, 한 줄에는 하나의 선언만 작성되어야 합니다(MUST). 여러개의 선언을 한 줄에 선언하면 안됩니다(MUST NOT).
  2. 트레이트를 사용할 때 use 구문을 작성한 이후에는 반드시 하나의 공백 라인이 있어야 합니다(MUST).
  3. 가시성(public, protected, private 등)의 구문은 PHP가 서포트 하는 한, 속성, 상수, 메소드를 정의할때 반드시(MUST) 정의되어야 합니다.
  4. 언더스코어(_)는 private 이나 protected 와 같은 가시성을 표현하기 위해 사용해서는 안됩니다(MUST NOT).
  5. 인수의 목록 앞에는 각 쉼표앞에 공백이 있어서는 안되며(MUST NOT), 쉼표 뒤에는 반드시(MUST) 하나의 공백이 있어야 합니다.
  6. 리턴 타입을 정의할 때는 콜론 뒤에 반드시(MUST) 하나의 공백이 존재해야 합니다. NULLABLE 리턴 타입을 표시하기 위한 물음표와 리턴 타입의 사이에는 공백이 존재해서는 안됩니다(MUST NOT).
  7. abstractfinal 키워드는 반드시(MUST) 가시성 선언의 앞에 위치해야 합니다.
  8. static 키워드는 반드시(MUST) 가시성 선언의 뒤에 위치해야 합니다.

Parentheses of the Control Structures(제어 구조에서의 소괄호)

  1. 제어 구조(if, else if, else)에서 소괄호의 전후에는 반드시(MUST) 하나의 공백이 있어야 합니다.
  2. 제어 구조의 소괄호의 내부에는 공백이 있어서는 안됩니다(MUST NOT).

Conclusion

PHP는 매우 큰 프로그래밍 언어이고, 굉장히 많은 사람들이 라이브러리, 프레임워크 등을 만들기 위한 다양한 프로젝트에 참가하고 있습니다. 이 때 우리는 보다 더 효율적인 협업을 위해 코딩 표준을 지킬 필요가 있습니다.

물론, 굉장히 많은 규칙이 존재하므로 모든 규칙을 외우는 것은 굉장히 힘들 것입니다. 그렇기 때문에 우리는 PHP CS와 같은 Code Sniffer를 사용하여 코드를 자동으로 수정하도록 할 수 있습니다.

Unlisted

--

--

Jangwook Kim

Korean, live in Japan. The programmer. I love to learn something new things. I’m publishing my toy projects using GitHub. Visit https://www.jangwook.net.