[PHP] PSR-1: Basic Coding Standard

2016-08-31

1. Overview

  • 각 파일에서 PHP 선언은 반드시 <?php<?=만 사용해야 한다.
  • 각 파일은 반드시 UTF-8로 저장하되 BOM이 없어야 한다.
  • 각 파일은 심볼(클래스Class, 함수Function, 상수constant 등)을 선언하거나 부가작용side effect(아웃풋 생성, .ini 설정 수정 등)을 일으키되, 둘을 동시에 해서는 안된다.
  • 네임스페이스Namespace와 클래스는 반드시 "오토로딩" PSR을 따라야 한다: [PSR-0, PSR-4].
  • 클래스명은 반드시 StudlyCaps(대문자로 시작, 대문자로 구분)로 선언되어야 한다.
  • 클래스 상수는 반드시 대문자이며 구분은 언더바_로 선언되어야 한다.
  • 메소드명은 반드시 camelCase(소문자로 시작, 대문자로 구분)로 선언되어야 한다.

2. Files

2.1 PHP 태그

PHP 코드는 반드시 <?php ?><?= ?>으로 사용되어야 하며, 다른 변형을 사용해서는 아니된다.

2.2 캐릭터 인코딩

PHP 코드는 반드시 BOM이 없는 UTF-8 인코딩을 사용해야 한다.

2.3 부가작용

한 개의 파일은 새로운 심볼(클래스, 함수, 상수 등)을 선언하고 다른 부가 작용을 일으키면 안되거나, 로직을 실행하여 부가 작용을 일으키되 둘을 동시에 해서는 아니된다.

"부가작용"이란, 클래스, 함수, 상수 등을 선언하는 데 있어 직접적인 관련이 없이 단지 불러와 사용하는 로직의 실행을 의미한다.

"부가작용"은 다음의 항목들을 포함하지만서도 이에 제한받지 않는다: 아웃풋 생성, require이나 include의 명시적 사용, 외부 서비스와의 연결, ini 설정값 수정, 오류 또는 예외사항 출력, 전역 또는 정적 변수의 수정, 파일을 읽고 쓰기 등.

아래는 선언과 부가작용을 둘 다 포함하는 예시이며, 하지 말아야 할 예시이다:

<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);

// side effect: loads a file
include "file.php";

// side effect: generates output
echo "<html>\n";

// declaration
function foo()
{
    // function body
}

아래는 부가작용 없이 선언만 포함하는 예시이며, 본보기로 삼을 예시이다:

<?php
// declaration
function foo()
{
    // function body
}

// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

3. 네임스페이스와 클래스명

네임스페이스와 클래스는 반드시 "오토로딩" PSR을 따라야 한다: [PSR-0, PSR-4].

이는, 각 클래스는 독립적인 파일에 있으며, 최소한 한 단계 위의 네임스페이스에 속해 있어야 한다는 의미이다.

클래스명은 반드시 StudlyCaps(대문자로 시작, 대문자로 구분)로 선언되어야 한다.

PHP 5.3 이후 버전을 지원하는 PHP 코드는 반드시 정식 네임스페이스를 사용해야 한다.

예를 들면 다음과 같다:

<?php
// PHP 5.3 and later:
namespace Vendor\Model;

class Foo
{
}

PHP 5.2.X 이전 버전을 지원하는 PHP 코드는 의사-명명 규칙Pseudo-namespacing conventionVendor_ 접두어를 클래스명에 사용해야 한다.

<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}

4. 클래스 상수, 속성, 그리고 메소드

용어 "클래스"란 모든 클래스, 인터페이스interface, 그리고 특성trait을 포함한다.

4.1 상수

클래스 상수는 반드시 대문자이며 구분은 언더바_로 선언되어야 한다. 예를 들면 다음과 같다:

<?php
namespace Vendor\Model;

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

4.2 속성

본 가이드에서는, $StudlyCaps, $camelCase, 또는 $under_score을 속성명으로 사용할 것을 의도적으로 피하고 있다.

어떠한 명명 규칙을 사용하든 타당한 범위에서 일관성 있게 적용되어야 한다. 이 범위는 벤더 수준, 패키지 수준, 클래스 수준, 또는 메소드 수준일 수 있다.

4.3 메소드

메소드명은 반드시 camelCase()(소문자로 시작, 대문자로 구분)로 선언되어야 한다.

출처: PHP-FIG