PSR-1: 기본 코딩 표준

(PSR-1에서 넘어옴)

표준 중 이 섹션은 공유되는 PHP 코드 간에 높은 수준의 기술적 상호운용성을 보장하기 위해 요구되는 표준 코딩요소 고려사항들로 구성된다.

이 문서의 키워드 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"은 RFC 2119에 설명된 대로 해석된다.

1 개요[ | ]

PSR-1: Basic Coding Standard
PSR-1: 기본 코딩 표준
  • 파일에는 <?php<?= 태그만 사용해야 한다(MUST).
  • 파일에서 PHP 코드에는 BOM 없는 UTF-8만 사용해야 한다(MUST).
  • 파일에서는 심볼(클래스, 함수, 상수 등)을 선언하거나 사이드 이펙트(예: 출력 생성, .ini 설정 변경 등)을 실행해야 하지만(SHOULD), 한번에 둘 다 수행해서는 안 된다(SHOULD NOT).
  • 네임스페이스와 클래스는 "자동로딩" PSR (PSR-0, PSR-4)을 따라야 한다(MUST).
  • 클래스 이름은 반드시 StudlyCaps로 선언해야 한다(MUST).
  • 클래스 상수는 밑줄 구분자를 사용하고 모두 대문자로 선언해야 한다(MUST).
  • 메소드 이름은 반드시 camelCase로 선언해야 한다(MUST).

2 파일[ | ]

2.1 PHP 태그[ | ]

  • PHP 코드는 긴 <?php ?> 태그 또는 짧은-에코 <?= ?> 태그를 사용해야 한다. 그외 다른 태그 변형판을 사용해서는 안된다(MUST NOT).

2.2 문자 인코딩[ | ]

2.3 사이드 이펙트[ | ]

  • 파일에서는 새로운 심볼(클래스, 함수, 상수 등)를 선언해야 하고, 다른 사이드 이펙트를 일으키지 말아야 한다.
  • "사이드 이펙트"이라는 문구는, 단순히 파일을 include하며 클래스, 함수, 상수 등의 선언과 직접적인 관련이 없는 로직의 실행을 의미한다.
  • "사이드 이펙트"에는 다음과 같은 것들이 포함되지만 이에 국한되는 것은 아니다.
출력 생성, require 또는 include의 명시적 사용, 외부 서비스 연결, ini 설정 수정, 오류 또는 예외 발생, 전역 또는 정적 변수 변경, 파일 읽기 또는 파일 쓰기, 등이다.
  • 아래는 선언과 사이드 이펙트가 함께 있는 파일의 예이다. 즉 피해야 할 예시:
<?php
// 사이드 이펙트: ini 설정 변경
ini_set('error_reporting', E_ALL);

// 사이드 이펙트: 파일 로드
include "file.php";

// 사이드 이펙트: 출력 생성
echo "<html>\n";

// 선언
function foo()
{
    // 함수 본문
}
  • 다음 예시는 사이드 이펙트가 없는 선언을 가진 파일이다. 즉, 따라해도 되는 예시:
<?php
// 선언
function foo()
{
    // 함수 본문
}

// 사이드 이펙트가 아닌 선택적 선언
if (! function_exists('bar')) {
    function bar()
    {
        // 함수 본문
    }
}

3 네임스페이스와 클래스 이름[ | ]

  • 네임스페이스와 클래스는 "자동로딩" PSR (PSR-0, PSR-4)을 따라야 한다(MUST).
  • 이것은 각 클래스가 그 자체로 파일에 있고 최소한 한 수준의 네임스페이스(최상위 벤더 이름)에 있음을 의미한다.
  • 클래스 이름은 StudlyCaps에서 선언되어야 한다(MUST).
  • PHP 5.3 이상용으로 작성된 코드는 정식 네임스페이스를 사용해야 한다(MUST).
<?php
// PHP 5.3 이상:
namespace Vendor\Model;

class Foo
{
}
  • 5.2.x 이전용으로 작성된 코드는 클래스 이름에 Vendor_ 접두어를 붙이는 의사-네임스페이스 규칙을 적용해야 한다(SHOULD).
<?php
// PHP 5.2.x 이전:
class Vendor_Model_Foo
{
}

4 클래스 상수, 속성, 메소드[ | ]

  • 여기서 "클래스"라는 용어는 모든 클래스(class), 인터페이스(interface), 특성(trait)을 가리킨다.

4.1 상수[ | ]

  • 클래스 상수는 밑줄 구분자를 사용하여 모두 대문자로 선언해야 한다(MUST).
<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

4.2 속성[ | ]

  • 이 가이드는 $StudlyCaps, $camelCase, $under_score 속성 이름 사용에 관한 권장사항을 의도적으로 피했다.
  • 어떤 명명 규칙을 사용해도 되지만 합리적인 범위 내에서 일관되게 적용해야 한다(SHOULD).
  • 이러한 범위는 벤더 수준, 패키지 수준, 클래스 수준, 메서드 수준일 수 있다.

4.3 메소드[ | ]

  • 메소드 이름은 반드시 camelCase()로 선언해야 한다(MUST).

5 #요약[ | ]

  • "PHP 기본 코딩 표준"
  • PHP 태그: 긴태그 <?php와 짧은태그 <?=만 사용
  • 캐릭터 인코딩: UTF-8 without BOM만 사용
  • 클래스 상수: 모두 대문자, 구분자는 밑줄
class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

6 같이 보기[ | ]

7 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}