Framework Interop Group에서 PSR-0, PSR-1, PSR-2라는 권장 스타일 가이드를 제시했다. 이러한 스타일로 프로그래밍을 하면 좋겠다라는 규칙을 담고 있는데, Drupal, Zend, Symfony, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium등이 이 스타일을 따르고 있다.
어디까지나 권장 스타일 가이드이다. 따라서 반드시 따라야할 필요도 이유도 없다. 가능하면 위의 스타일을 따르면서, 개발 환경에 따라서 다른 규칙과 조합해서 사용하면 된다. 목적은 (자신을 포함)다른 개발자들도 코드를 쉽게 읽고 사용할 수 있으며, 서드파티 라이브러리를 연동에 일관성을 유지하도록 하는데 있다.
테스트 결과
{{#!plain
autoload('joinc\stl\queue') => require 'joinc/stl/queue.php';
autoload('joinc\date\class_ctime') => require 'joinc/date/class/ctime.php';
}}}
이건 간단한 구현이고, PSR-0을 제대로 만족하는 loader는 SplClassLoader.php를 참고하기 바란다.
PSR-1은 공유하는 PHP 코드들간에, 높은 수준의 기술적 상호 운용성을 보장하기 위해서 필요한 표준 코딩 요소들을 제안한다.
각 제안 요소들은 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" 키워드를 이용해서 분류를 하고 있다. 예컨데 "MUST"가 붙은 요소들은 반드시 지켜야 하는 것들이고, "OPTIONAL"은 선택사항이다. 키워드들에 대한 자세한 내용은 rfc2119를 참고하자.
사이드 이펙트는 음.. 너무 광범위 하다. 사실상 제한이 없는데, 예를들어 출력을 만들거나, require, include등 (fopen등을 이용)외부 서비스를 호출하거나, init 설정 변경, 전역/static 변수의 수정 등 모든 작업에서 사이드 이펙트가 발생할 수 있다. 하지만 가능한 사이드 이펙트가 발생하지 않는 코딩 스타일은 제시할 수 있다.
아래는 여러 사이드 이펙트를 포함한 소스코드다.
네임스페이스와 클래스 이름은 PSR-0과 PSR-4 규격에 따라서 "autoloading"을 지원하도록 만들어야 한다.
이는 각 클래스 이름이 파일에 대응하며, 네임스페이스는 최소한 1 레벨 이상의 깊이를 가져야 함을 의미한다.(Top 레벨은 벤더 이름이다.)
클래스 이름은 반드시 StudlyCaps형식을 따라야 한다.
PHP 5.3 이후의 코드들은 반드시 네임스페이스 규칙을 따라야 한다.
Contents
1. 코딩 스타일 가이드
2. PSR-0
2.1. 필수 요소
2.2. 예제
2.3. 네임스페이스와 클래스 이름에서의 언더바
2.4. 구현 예제
3. PSR-1 Basic coding standard
3.1. Overview
3.2. 파일
3.2.1. PHP 태그
3.2.2. 문자 인코딩
3.2.3. 사이드 이펙트
3.3. 네임스페이스와 클래스 이름
3.4. 클래스 상수, Properties, 메서드
3.4.1. 상수
3.4.2. Properties
3.4.3. 메서드
4. PSR-2 General Coding style
4.1. Overview
4.1.1. 예제
4.2. General
4.2.1. 기본 코딩 규칙
4.2.2. 파일
4.2.3. 줄
4.2.4. Indenting
4.2.5. 키워드와 True/False/Null
4.3. Namespace and Use Declarations
4.4. 클래스, properties, 메서드
4.4.1. Extends and Implements
4.4.2. Properties
4.4.3. Methods
4.4.4. Method Arguments
4.5. 제어문
4.5.1. if, elseif, else
4.5.2. switch, case
4.5.3. while, do while
4.5.4. for
4.5.5. foreach
4.5.6. try, catch
4.6. 클로저
4.7. Conclusion
5. PSR-3 Logger interface
6. PSR-4 Autoloader
1. 코딩 스타일 가이드
2. PSR-0
2.1. 필수 요소
2.2. 예제
2.3. 네임스페이스와 클래스 이름에서의 언더바
2.4. 구현 예제
3. PSR-1 Basic coding standard
3.1. Overview
3.2. 파일
3.2.1. PHP 태그
3.2.2. 문자 인코딩
3.2.3. 사이드 이펙트
3.3. 네임스페이스와 클래스 이름
3.4. 클래스 상수, Properties, 메서드
3.4.1. 상수
3.4.2. Properties
3.4.3. 메서드
4. PSR-2 General Coding style
4.1. Overview
4.1.1. 예제
4.2. General
4.2.1. 기본 코딩 규칙
4.2.2. 파일
4.2.3. 줄
4.2.4. Indenting
4.2.5. 키워드와 True/False/Null
4.3. Namespace and Use Declarations
4.4. 클래스, properties, 메서드
4.4.1. Extends and Implements
4.4.2. Properties
4.4.3. Methods
4.4.4. Method Arguments
4.5. 제어문
4.5.1. if, elseif, else
4.5.2. switch, case
4.5.3. while, do while
4.5.4. for
4.5.5. foreach
4.5.6. try, catch
4.6. 클로저
4.7. Conclusion
5. PSR-3 Logger interface
6. PSR-4 Autoloader
Recent Posts
Archive Posts
Tags