티스토리 뷰
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칸의 공백 사용합니다.
- 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를 사용하기 시작하여 관심을 가지고 공부하기 시작했습니다.
'PHP' 카테고리의 다른 글
[ PHP ] Fatal error: Maximum function nesting level of 'xxx' reached (xdebug.max_nesting_level) (0) | 2017.06.02 |
---|---|
[ php ] Composer (PHP 의존성 관리도구) 소개 (0) | 2017.01.04 |
[PHP] MAMP를 이용한 Windows/MAC 에서 PHP 개발 환경 쉽게 셋팅하기 (0) | 2016.12.20 |
[PHP] windows 에서 Apache, Mysql 서비스 제거 (1) | 2016.12.20 |
[PHP] Window10에서 APM 환경 구축하기 - 3. MYSQL 설치 (5) | 2016.11.30 |