PSR
은 PHP Standard Recommendation의 약자로 실제로는 PSR이라고 불러야 하는데, 이는 일련의 권장 표준으로, 현재 통과된 사양에는 PSR-0(Autoloading Standard), PSR-1(Basic)이 있습니다. 코딩 표준), PSR-2(코딩 스타일 가이드), PSR-3(로거 인터페이스), PSR-4(향상된 자동 로딩). 이는 공식 PHP 표준은 아니지만 Zend 및 Symfony2와 같은 잘 알려진 PHP 프로젝트에서 추출한 일련의 표준으로 현재 점점 더 많은 커뮤니티 프로젝트가 회원으로 가입하고 이 표준을 따르고 있습니다.
PHP-FIG — PHP Framework Interoperability Group은 PSR 개발 사양을 공식화하는 조직입니다. 회원은 유명한 PHP 커뮤니티 프로젝트로 구성되어 있으며 공식 웹사이트 하단에서 회원 목록을 확인할 수 있습니다. 홈페이지. 이들 회원은 사양을 개발하고 이를 프로젝트에 구현합니다.
사실 각 PSR 사양의 내용은 매우 간결하고 명확하여 수십 페이지에 달하는 사양보다 훨씬 좋습니다.
PSR-0(자동 로딩 표준)
PSR-0은 클래스 자동 로딩 사양입니다(원문: 공식 홈페이지, GitHub). 2014-10-21 현재 이 사양은 더 이상 사용되지 않는 것으로 표시되고 PSR-4로 대체됩니다. 그 내용은 매우 간결합니다.
콘텐츠:
정규화된 네임스페이스 및 클래스 이름은 다음과 같은 구조를 가져야 합니다. "
각 네임스페이스에는 최상위 네임스페이스("공급업체 이름")가 있어야 합니다.
각 네임스페이스에는 개수 제한 없이 하위 네임스페이스가 있을 수 있습니다.
시스템이 로드되면 각 네임스페이스가 파일에서 제거됩니다. , "운영 체제 경로 구분 기호"(DIRECTORY_SEPARATOR)로 변환해야 합니다.
"클래스 이름"의 각 "_" 문자는 DIRECTORY_SEPARATOR로 변환됩니다. "_" 기호는 네임스페이스에서 명확한 의미가 없습니다
네이밍 표준을 준수하는 네임스페이스 및 클래스 이름은 파일을 로드하기 위해 ".php"로 끝나야 합니다
벤더 이름, 네임스페이스, 클래스 이름 대문자와 소문자로 구성될 수 있으며, 네임스페이스와 클래스 이름은 다중 시스템 호환성을 보장하기 위해 대/소문자를 구분합니다
PSR-1(기본 코딩 표준)
PSR-1은 기본 코딩 표준(원문: 공식 홈페이지, GitHub). 클래스 파일의 명명 방법, 클래스 이름, 클래스 메소드 이름 등 내용도 매우 간결하다.
내용:
소스 파일은
소스 파일에 있는 PHP 코드의 인코딩 형식은 다음과 같은 태그만 사용해야 합니다. BOM에는 UTF-8을 사용하지 마세요
소스 파일은 선언(클래스, 함수, 상수 등)에만 사용하거나 부작용을 일으키는 작업(예: 출력 정보, 수정)에만 사용하는 것이 좋습니다. .ini 구성 파일 등), 그러나 이 두 가지 작업을 동시에 수행하면 안 됩니다
네임스페이스와 클래스는 PSR-0 표준을 준수해야 합니다
클래스 이름은 다음을 사용하여 작성해야 합니다. StudlyCaps
클래스 내 상수는 대문자와 밑줄(_)로만 구성되어야 합니다
메소드 이름은 cameCase를 사용하여 작성해야 합니다
PSR-2(코딩 스타일 가이드)
PSR-2는 코딩 스타일 표준입니다(원문: 공식 홈페이지, GitHub). 내용은 약간 더 많지만 여전히 상대적으로 간결합니다. 이는 PSR-1을 기반으로 하며 들여쓰기, 각 코드 줄의 길이, 줄 바꿈, 메서드 가시성 선언, 공백 및 메서드 본문 중괄호 래핑에 대한 관련 조항을 포함합니다.
표준 콘텐츠:
코드는 PSR-1을 준수해야 합니다
코드는 탭 대신 들여쓰기를 위해 4개의 공백을 사용해야 합니다
하드 제한이 없어야 합니다. 코드 줄 길이는 소프트 제한이 120자여야 하며 각 코드 줄은 80자 이하여야 합니다.
네임스페이스 선언 아래에 빈 줄이 있어야 하며 use 선언 아래에도 빈 줄이 있어야 합니다
클래스의 왼쪽 중괄호는 선언 아래 자체 줄에 배치되어야 하며, 오른쪽 중괄호는 클래스 본문 아래에 자체적으로 배치되어야 합니다. line
메소드 왼쪽 중괄호는 선언 아래 자체 줄에 배치되어야 하며, 오른쪽 중괄호는 메소드 본문의 다음 줄에 배치되어야 합니다.
모든 속성과 메소드는 가시성 선언이 있어야 합니다. 추상 및 최종 선언은 선언 앞에 있어야 하며 정적 선언은 가시성 선언 뒤에 있어야 합니다.
구조 제어 키워드 뒤에는 공백이 있어야 합니다. 메소드 및 함수 호출 후
구조체 컨트롤의 왼쪽 중괄호는 반드시 같은 줄에 위치해야 하고, 오른쪽 중괄호는 반드시 본문 다음 줄에 위치해야 합니다. 구조체의 제어 코드
제어 구조체의 왼쪽 괄호 뒤에 공백이 없어야 하고, 오른쪽 괄호 앞에 공백이 없어야 합니다.
PSR-3(Logger Interface)
PSR-3은 인터페이스를 통한 애플리케이션 로그 클래스 정의입니다(원문: 공식 홈페이지, GitHub). 내용은 매우 간단합니다. 단지 공식 샘플 코드를 인용하면 됩니다. 물론 특정 애플리케이션에서는 이 인터페이스를 따르면 해당 구현을 확실히 사용자 정의할 수 있습니다.
기본 콘텐츠:
LoggerInterface는 8개 수준의 로그(디버그, 정보, 알림, 경고, 오류, 심각, 경고, 긴급)를 기록하기 위한 8개의 인터페이스를 노출합니다.
아홉 번째 방법은 로그 수준을 첫 번째 매개변수로 받아들이는 log입니다. 로그 수준 상수를 사용하여 이 메서드를 호출하면 지정된 수준 메서드를 직접 호출하는 것과 동일한 결과가 나와야 합니다. 이 사양에 정의되지 않았고 구현에 알려지지 않은 로그 수준으로 이 메서드를 호출하면 PsrLogInvalidArgumentException이 발생해야 합니다. 현재 클래스 라이브러리가 이를 지원하는지 확실하지 않은 경우 사용자 정의 로그 수준을 사용하지 않는 것이 좋습니다.
PSR-4(개선된 자동 로딩)
PSR-4는 자동 로딩 사양을 개선한 버전입니다(원문: 공식 홈페이지, GitHub). PSR-0 사양의 후속 제품입니다. PSR-0을 포함한 다른 자동 로딩 사양과 호환됩니다.
내용:
"클래스"라는 용어는 클래스, 인터페이스, 특성 및 기타 유사한 구조를 포함하는 일반적인 용어입니다.
정규화된 클래스 이름은 다음과 같습니다. 다음 예는 다음과 같습니다.
완전히 호환되는 클래스 이름에는 하나의 최상위 네임스페이스(공급업체 이름)가 있어야 합니다.
다음이 있을 수 있습니다. 완전히 호환되는 여러 클래스 이름 하위 네임스페이스
완전히 호환되는 클래스 이름에는 종료 클래스 이름이 있어야 합니다.
완전히 호환되는 클래스 이름에서는 밑줄은 특별한 의미가 없습니다.
문자는 특별한 의미가 없습니다. 완전히 호환되는 클래스 이름 클래스 이름은 대문자와 소문자를 조합할 수 있습니다.
모든 클래스 이름은 대소문자를 구분하여 인용해야 합니다.
완전히 호환되는 클래스 이름에서 파일을 로드하는 경우:
완전히 호환되는 클래스 이름에서 하나 이상의 연속된 하위 네임스페이스(최상위 네임스페이스의 구분 기호 제외)로 구성된 네임스페이스 접두사는 "네임스페이스의 기본 디렉터리
하나 이상에 해당합니다. "접두사" 뒤의 연속적인 하위 네임스페이스 이름은 "기본 디렉터리" 아래의 하위 디렉터리에 해당합니다. 여기서 네임스페이스 구분 기호는 디렉터리 구분 기호를 나타냅니다. 하위 디렉토리 이름은 하위 네임스페이스 이름의 대소문자와 일치해야 합니다.
종료 클래스 이름은 .php로 끝나는 파일에 해당합니다. 파일 이름은 종료 클래스 이름의 대소문자와 일치해야 합니다
자동 로더의 구현은 예외를 발생시키거나 어떤 수준의 오류도 발생해서는 안 되며 값을 반환해서는 안 됩니다