PSR-1 기본 코딩 표준

비공식 번역입니다. 문서의 내용에 차이가 존재하는 경우 원본을 따릅니다.

이 문서는 공유되는 PHP 코드 간의 높은 수준의 기술적 상호 호환성 보장에 필요한 표준 코딩 사항을 다루고 있습니다.

이 문서에서 핵심이 되는 단어는 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 입니다. 이것은 RFC 2119 에서 정의한 뜻과 내용을 기준으로 합니다.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.

개요

  • PHP 코드는 반드시(MUST) 긴 <?php … ?> 태그나 짧은 <?= … ?> 태그를 사용해야 합니다.
  • PHP 코드는 반드시(MUST) BOM이 없는 UTF-8 문자열을 사용해야 합니다.
  • PHP 코드는 클래스와 함수 또는 변수와 상수 등을 선언하거나, 출력 생성과 INI 설정 변경 등의 사이드 이펙트가 존재하는 형태로 작성해야 하지만(SHOULD) 두 가지를 함께 작성하면 안 됩니다(SHOULD NOT).
  • Namespace와 클래스는 반드시(MUST) “Autoloading”에 관한 PSR: [PSR-0, PSR-4] 을(를) 기준으로 작성해야 합니다.
  • 클래스명은 반드시(MUST) StudlyCaps 형태로 작성해야 합니다.
  • 클래스의 상수명은 반드시(MUST) 대문자와 밑줄로 작성해야 합니다.
  • 메서드명은 반드시(MUST) camelCase 형태로 작성해야 합니다.

파일

PHP 태그

PHP 코드는 반드시(MUST) 긴 <?php … ?> 태그나 짧은 <?= … ?> 태그를 사용해야 합니다. 그 외의 태그를 사용해서는 안 됩니다(MUST NOT).

문자열 인코딩

PHP 코드는 반드시(MUST) BOM이 없는 UTF-8 문자열을 사용해야 합니다.

사이드 이펙트

PHP 코드는 클래스와 함수 또는 변수와 상수 등을 선언하거나, 출력 생성과 INI 설정 변경 등의 사이드 이펙트가 존재하는 형태로 작성해야 하지만(SHOULD) 두 가지를 함께 작성하면 안 됩니다(SHOULD NOT).

PHP 코드는 가급적(SHOULD) 클래스와 함수 또는 변수와 상수 등을 선언하는 형태, 출력 생성과 INI 설정 변경 등의 사이드 이펙트가 존재하는 형태로 분리하여 작성하는 것을 권장하지만, 선언과 사이드 이펙트 두 가지를 동일한 곳에 작성하는 것을 권장하지 않습니다(SHOULD NOT).

사이드 이펙트의 정의는 대개 일반적인 내용의 클래스, 함수, 변수와 상수 등의 선언을 제외하고, 선언과 직접적인 관련이 없는 내용들을 단순히 코드에 작성하는 것부터 실행하는 행위 전체를 포함합니다.

사이드 이펙트는 출력 생성, include 및 require의 사용, 외부 서비스 연결, INI 설정 변경, 오류 또는 예외 발생, 전역 변수 또는 정적 변수 변경, 파일의 읽기 및 쓰기 등을 포함하는 행위이지만 이에 국한되지는 않으며 더 많은 것들을 포함할 수 있습니다.

다음 예제는 선언과 사이드 이펙트가 모두 포함된 PSR에서 권장하지 않는 코드입니다.

PHP
<?php
// 사이드 이펙트: INI 설정을 변경합니다
ini_set('error_reporting', E_ALL);

// 사이드 이펙트: include를 시도하고 있습니다
include "file.php";

// 사이드 이펙트: 외부로 결과를 출력합니다
echo "<html>\n";

// 함수를 선언합니다
function foo()
{
    // 함수 본문
}
?>

다음 예제는 INI 설정 변경, include 및 출력 생성과 같은 사이드 이펙트가 존재하지 않는 코드입니다.

PHP
<?php
// 정의
function foo()
{
    // 함수 본문
}

// 조건부 선언은 사이드 이펙트가 아닙니다.
if (! function_exists('bar')) {
    function bar()
    {
        // 함수 본문
    }
}

Namespace와 클래스

Namespace와 클래스는 반드시(MUST) “Autoloading”에 관한 PSR: [PSR-0, PSR-4] 을(를) 기준으로 작성해야 합니다.

이것은 각 클래스가 최소한 하나 이상의 Namespace를 사용 중인 파일에 존재함을 의미합니다.

클래스명은 반드시(MUST) StudlyCaps 형태로 작성해야 합니다.

PHP 5.3 이상용으로 작성된 코드는 반드시(MUST) 공식 Namespace를 사용해야 합니다.

PHP
<?php
// PHP 5.3 또는 그 이후의 버전:
namespace Vendor\Model;

class foo 
{
}

5.2.x 용으로 작성된 코드는 Namespace와 유사한 규칙을 사용하기 위하여 클래스명에 가급적(SHOULD) Vendor_ 접두어를 붙이도록 합니다.

PHP
<?php
// PHP 5.2.x 또는 그 이전의 버전
class Vendor_Model_Foo
{
}

클래스의 상수, 프로퍼티, 메서드

이 문서에서 클래스라 함은 모든 classinterface, trait를 포함하고 있습니다.

상수

클래스의 상수명은 반드시(MUST) 대문자와 밑줄로 작성해야 합니다.

PHP
<?php
namespace Vendor\Model

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

프로퍼티

이 가이드는 의도적으로 $StudlyCaps , $camelCase 또는 $under_score 와 같은 형태로 프로퍼티의 이름을 권장하는 것을 피하고 있습니다.
프로퍼티는 어떠한 규칙을 사용해도 상관없지만 합리적인 범위 내에서 일관되게 적용되어야 합니다(SHOULD). 이 범위는 공급자 수준, 패키지 수준, 클래스 수준 또는 메서드 수준일 수 있습니다.

메서드

메서드명은 반드시(MUST) camelCase 형태로 작성해야 합니다.

Paul M. Jones et al. “Basic Coding Standard”. PSR-1, Apr 20, 2022. https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md. accessed 8 Sep 2023.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다