티스토리 뷰


PHP Standard Recommendation

국내에서는 아직도 많은 기업과 개발자들이 PHP를 이용하여 웹 개발을 하고있습니다. PHP는 JAVA나 Python 같은 언어에 비해 구식의 스타일을 쓰는 경향이 많다보니 이것을 개선할려는 움직임으로 Modern PHP이 강조되고 있는데, 이 Modern php 권고 사항으로 psr이 포함되어 있습니다.

(modern php에 관련하여 궁금하실 경우 해당 링크에서 확인하시면 자세한 내용을 확인하실 수 있습니다. 링크)


그럼 psr이 도대체 무엇일까요?

psr은 PHP-FIG (PHP Framework Interop Group) 이 주도하여 제안한 PHP 표준 권장안입니다. 즉 Code Convention 중 하나입니다.

최근에 나오는 Modern php 프레임워크 대부분은 이 psr를 표준으로 하여 개발되고 있습니다.


2016.12.26일 기준 통과된 규약은 7개입니다.



기본적으로 봐야하는 규약은 PSR-1 / PSR-2 / PSR-4 정도 되겠습니다.

PSR-1과 PSR-2는 코딩 스타일에 관련된 내용이며 PSR-4은 autoload와 관련 된 내용입니다. 


PSR-1 Basic Coding Standard

- 파일 인코딩은 BOM(Byte order Mark)이 없는 UTF-8만 사용

- 클래스 이름은 반드시 StudlyCaps 와 같이 첫 글자를 대문자를 이용

- 네임스페이스와 클래스는 오토로딩 표준(PSR-4)를 따를 것

<?php
// PSR-4
namespace Vendor\Model;
 
class Foo
{
}

- 클래스 상수(const)는 반드시 모두 대문자로 작성하고 구분자로 _ 를 이용하여 작성

- 클래스 메서드명은 반드시 camelCase() 처럼 카멜케이스(camelCase)로 작성.

<?php
namespace Vendor\Model;
 
class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';

    public function camelCase() {
        return "";
    }
}


PSR-2 Coding Style Guide

- PSR-1를 기본으로 합니다.

- 들여 쓰기는 tab 대신 4칸의 공백 사용합니다.

- PHP 닫는 태그(?>) 는 사용하지 않습니다.

- namespace 선언 후 다음줄은 공백줄이며 여러개의 use문은 줄 공백 없이 사용 후 마지막 use 문 다음에 공백줄을 사용합니다.

- 클래스와 메서드의 여는 괄호는 다음 줄에 사용하고 닫는 괄호는 내용 다음 줄에 닫아야 합니다.

- 한줄의 길이는 120자 이하로 사용할 것(권고사항입니다. 강제가 아니라)

- 메서드 접근제어자(private, public, protected)는 반드시 명시해야 합니다.

- abstract 과 final은 접근 제어자보다 앞에 있어야 하며 static은 접근 제어자 뒤에 나와야 합니다.

- 제어문 ( if / for 등) 여는 중괄호는 같은 줄에 사용하고 닫는 중괄호는 내용 다음줄에 닫으며 닫은 후 한줄 공백을 사용합니다.

- if 나 elseif 같은 제어 관련 구문은 제어문 뒤에 한 개의 공백을 두고 그 후에 괄호를 사용하고 조건문을 기술할 것. 함수 호출이나 메소드 호출은 메소드명 뒤에 공백이 있으면 안됩니다.


설명이 길어서 무슨 말인지 도저히 모르실 것 같아 예시문장을 준비하였습니다.


<?php
namespace Vendor\Package;
  
use FooInterface;
use BarClass as Bar;
  
class Foo extends Bar
{
    public function sampleFunction($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        }
    }
}

요즘은 IDE에 PSR-2를 잡아주는 기능이 있어서 저는 PHPstorm을 이용하여 확인하며 수정하고 있습니다.


PSR-4 Autoloader

PSR-4는 PSR-0을 대체하여 나온 오토로딩 표준입니다. PSR-4의 핵심은 네임스페이스 및 서브네임스페이스를 파일 시스템 디렉토리에 대응시킨다는 것입니다. 이러한 PSR-4를 지키는 autoloader를 직접 구현할 필요없이 컴포저를 사용하여 PSR-4 autoloading이 가능합니다.


이외에 Modern PHP에 대한 내용이 궁금하신다면 Josh LockHart의 Modern PHP 책을 한번 읽어보시기 바랍니다.

저는 최근 프로젝트에 Laravel를 사용하기 시작하여 관심을 가지고 공부하기 시작했습니다.



댓글