PSR(PHP Standards Recommendations)

inhalin·2021년 4월 11일
0

일터지식

목록 보기
1/14

반드시(MUST)절대(MUST NOT)는 꼭 지켜준다.

그 외에는 권장사항임

PSR-1: Basic Coding Standard

  • 반드시 <?php 또는 <?= 태그 사용
  • 반드시 BOM이 없는 UTF-8 사용
  • 각 파일은 심볼(클래스, 함수, 상수 등)을 선언하고 다른 사이드이펙트를 일으키지 않거나, 사이드이펙트(출력 생성, .ini 설정 변경 등)를 일으키지만 둘 다 하는건 안됨 (사이드이펙트 자세히보기 영어 | 한글)
  • 네임스페이스와 클래스는 반드시 'autoloading' PSR: [PSR-0, PSR-4] 사용
  • 클래스 이름은 반드시 PascalCase 사용 (ex. ClassNameExample)
  • 클래스 상수는 반드시 전부 대문자로, 단어 여러개일 경우 _로 구분 (ex. CLASS_CONSTANTS_LIKE_THIS)
  • 프로퍼티명은 정해진 규칙 없지만 적정범위 내에서 일관되게 적용
  • 메서드 이름은 반드시 camelCase 사용 (ex. methodNameMustBeWrittenThisWay)

PSR-12: Extended Coding Style

PSR-2를 확장 및 대체, PSR-1을 준수해야함

  1. 일반
  • 반드시 PSR-1의 모든 규칙을 따름
  • 반드시 Unix LF(Line Feed,\n) 사용
  • 반드시 ?> 생략
  • 절대 라인길이에 엄격한 제한 없음
  • 반드시 한줄의 글자수 가벼운 제한은 120자
  • 한줄은 80자 넘지 않고, 그보다 길면 여러줄로 나누길 권장
  • 절대 HEREDOC/NOWDOC 구문을 제외한 줄 끝 공백 있으면 안됨
  • 반드시 한줄에 문장 하나만
  • 반드시 4개의 스페이스로 들여쓰기 사용, 탭사용 절대 금지
  • 예약어와 타입은 반드시 소문자
  • 이후 php 버전의 새로운 타입과 키워드는 반드시 소문자
  • 반드시 짧은 형태의 타입 키워드 사용(boolean❌ ->bool, integer❌ ->int 등)
  1. Declare 선언문, 네임 스페이스 및 Import 선언문
  • <?php가 첫줄에 오면 절대 그 줄엔 다른 문장은 쓰면 안됨
  • import 문은 절대 \로 시작하면 안됨
  • 절대 두단계 이상의 복합 네임스페이스를 사용하면 안됨
  • php 여닫는 태그 밖에서 엄격한 유형을 선언하려면 선언문은 반드시 첫째줄 여는 php 태그에 쓰고, strict types 선언과 닫는 태그 포함
  • 선언문은 반드시 공백 없이, declare(strict_types=1)라고 씀
  • 블록 선언문은 반드시 다음과 같이 사용(공백, 괄호 위치 주의)
declare(ticks=1) {
    // some code
}
  1. 클래스, 프로퍼티, 메소드
  • 닫는 중괄호는 절대 같은 줄의 주석이나 문장 뒤에 오면 안됨
  • 새 클래스를 인스턴스화할때는 반드시 소괄호 사용
new Foo();
  • extendsimplements 키워드는 반드시 클래스 이름과 같은 줄에 선언
  • 여닫는 중괄호는 반드시 그 줄에 그거 하나만, 절대 아래위로 빈줄 있으면 안됨

작성중

반드시
절대

  1. 제어구조
  • 제어구조 키워드 다음에 반드시 공백 하나 넣기
  • 여는 괄호 다음/닫는 괄호 전에 절대 공백 넣지 않기
  • 닫는 괄호와 여는 중괄호 사이에 반드시 공백 하나 넣기
  • 제어구조 바디는 반드시 한칸 들여쓰기(스페이스 4개)
  • 바디는 반드시 여는 중괄호 다음줄에 써줌
  • 닫는 중괄호는 반드시 바디 다음줄에 써줌
  • 각 제어구조의 바디는 반드시 중괄호로 묶어줌
<?php

if ($expr1) {
    // if body
} else {
    // else body;
}


if (
    $expr1
    && $expr2
) {
    // if body
} elseif (
    $expr2
    && $expr3
) {
    // elseif body
} 
<?php

switch ($expr) {
    case 0:
        echo 'First case, with a break';
        break;
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}

switch (
    $expr1
    && $expr2
) {
    // structure body
}
<?php

// 한줄
for ($i = 0; $i < 10; $i++) {
    // for body
}

// 여러줄
for (
    $j = 0;
    $j < 10;
    $j++
) {
    // for body
}
  1. 연산자
  • 증감연산자는 연산자와 피연산자 사이에 절대 공백 포함하면 안됨
$i++;
--$j;
  • 형변환연산자는 괄호 안에 절대 공백 포함하면 안됨
$intValue = (int) $input;
  • 모든 이항 산술(arithmatic) / 비교(comparison) / 할당(assignment) / 비트(bitwise) / 논리(logical) / 스트링(string) / 타입(type) 연산자 앞뒤로 반드시 하나 이상의 공백 사용
if ($a === $b) {
    $foo = $bar ?? $a ?? $b;
} elseif ($a > $b) {
    $foo = $a + $b * $c;
}
  • 삼항 연산자의 ?: 앞뒤로 반드시 하나 이상의 공백 사용
  • 중간 피연산자가 없으면 반드시 이항 비교 연산자 규칙을 따름
$variable = $foo ? 'foo' : 'bar';
$variable = $foo ?: 'bar';
  1. 클로저

작성중

반드시
절대

  1. 익명 클래스
  • 반드시 클로저와 동일한 지침과 원칙 따름
  • implements 인터페이스 목록이 한줄이면 중괄호를 같은 줄에 써도 되지만, 여러줄로 나눌거면 반드시 다음 줄에 써줌.
<?php

// Brace on the same line
$instance = new class extends \Foo implements \HandleableInterface {
    // Class content
};

// Brace on the next line
$instance = new class extends \Foo implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // Class content
};

0개의 댓글