PSR(PHP Standard Recommendation)은 PHP-FIG (PHP Framework Interop Group) 이 주도하여 제안한 PHP 표준 권장안이다.
최근 대부분의 PHP 프로젝트들이 이 PSR을 표준으로 하여 개발 중이다.
PSR-1 : 기본 코딩 표준 (http://www.php-fig.org/psr/psr-1/)
PHP Tags
php 코드는 <?php ?>와 short echo 인 <?= ?> 태그 안에서만 사용해야 한다.
Character Encoding
php 파일의 문자 인코딩은 BOM(Byte order Mark) 없이 UTF-8 만 사용해야 한다.
Side Effects
다른 파일들과 클래스, 함수, 상수 등을 선언할 때 충돌하지 않도록 조건부 선언(no side-effects) 등을 사용한다.
side-effects 는 출력 생성, require 나 include 의 사용, 외부 서비스 연결, .ini 설정 변경, 에러나 예외 생략 global 이나 static 변수 변경, 파일 읽고 쓰기 등을 포함된다.
하나의 php 파일에 새로운 심볼(클래스, 함수, 상수 등)을 선언 + side-effects 를 사용 or
하나의 php 파일에 새로운 심볼(클래스, 함수, 상수 등)을 선언 + no side-effects 를 사용
side-effects 와 no side-effects 를 함께 사용하지 않는 것이 좋다.
<?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 } | cs |
<?php // declaration function foo() { // function body } // conditional declaration is *not* a side effect if (! function_exists('bar')) { function bar() { // function body } } | cs |
Namespace and Class Names
네임스페이스와 클래스는 PSR-0, PSR-4 의 autoloading 을 따라야 한다.
즉, 각 클래스는 하나의 파일을 가져야 하고, 최소 하나의 레벨의 네임스페이스에 위치해야 한다 : (최상위 레벨은 vendor 이름)
클래스 이름은 StudlyCaps(대문자로 시작, 대문자로 구분) 방식으로 선언되어야 한다.
PHP 5.3 이후의 코드에서는 형식적인 네임스페이스를 사용해야 한다. (namespace Vendor\Model; class Foo)
PHP 5.2 이전의 코드에서는 가상 네임스페이스 관례를 사용해야 한다. (class Vendor_Model_Foo)
<?php // PHP 5.3 and later: namespace Vendor\Model; class Foo { } | cs |
<?php // PHP 5.2.x and earlier: class Vendor_Model_Foo { } | cs |
Constants
클래스 상수는 _(underscore)로 구별된 대문자로만 선언되어야 한다.
<?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01'; } | cs |
Properties
권장하는 방식은 없지만 일관되게 합리적인 범위 내에서 선언한다.
Methods
메소드는 camelCase() (소문자로 시작, 대문자 구분) 로 선언한다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.