-
[PHP] 표준 권고 ( PSR )Programming/프로그래밍 2020. 9. 7. 01:05
- PSR-FIG
이것은 규칙, 규정안이 아니지만 사실상의 표준을 제정하는 것.
하지만, 개발자의 편안함을 위해 고안되었으며 코드의 가독성에 대해 얘기를 한다.
- 오토로딩
PHP 프레임워크는 오토로딩을 통해 함께 작동한다.
모던 PHP의 컴포넌트와 포레임워크 대부분이 공통 오토로더를 준수한다.
- 코드 스타일
▶PSR - 0 : Autoloading Standard ( 사실상, 중단 )
autoloader 를 통해 클래스를 손쉽게 로딩할 수 있도록 하는 표준.
PSR-4가 제정되면서 무효화.
PSR-4는 PHP-5.4 이상에서 사용가능.
▶ PSR - 1 : Basic Coding Standard
- 네임스페이스와 클래스는 오토로딩 표준 ( PSR-0, PSR-4 )를 따름.
- PHP 파일은 BOM 없는 UTF-8 인코딩을 사용함.
<?php namespace Vendor\Model; class Foo { }
클래스 이름은 반드시 첫 글자를 대문자로 한다.
클래스 내 상수는 반드시 모두 대문자로 작성하고 구분자로 _를 사용한다.
<?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01' }
클래스 내 메소드의 이름은 반드시 카멜케이스( CamelCase() )를 사용한다.
클래스 명 : 첫글자 대문자인 낙타표기법. CoffeeMachine.
메소드 명 : 첫글자 소문자인 낙타표기법. isModthod.
상수 명 : 오직 대문자.
▶ PSR - 2 : Coding Style Guide - 코드 스타일 가이드 ( 비추천 )
PSR - 1의 선행조건을 이용
들여쓰기 - tab 대신 4칸의 공백을 사용한다.
<?php 를 약속한다. 즉, 닫는 태그(?>)는 생략한다.
각 줄은 80 글자를 넘지 않으며 최대 120글자를 넘기지 말자. 줄 끝에 공백문자가 오게 하지 말자.
키워드의 true, false, null은 오직 소문자로만 사용하자.
네임스페이스 : 네임스페이스 선언 후 공백줄이 뒤따른다.
클래스 또한 마찬가지이다.
<?php namespace Symfony\Component; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class App{ //main. }
다음은 나중에 다시 언급하도록 하겠다.
▶ PSR - 3 : Logger Interface - 로거 인터페이스
PSR-3 권장안과 호환하는 PHP 로거 컴포넌트에는 Psr\Log\LoggerInterface 인터페이스를 구현한 PHP 클래스가 반드시 있어야 한다.
로거를 사용하는 이유는 어플리케이션 로그를 남기기 위해서 사용된다고 한다.
로거는 갖가지 메시지를 지정한 방식으로 출력하는 객체라고 하고, 안정성 점검 및 문제들을 해결하기 위해서 사용된다고 하며 텍스트파일이나 syslog, 이메일, 네트워크로 연결된 서버, API, 데이터베이스 등등 모든 방식으로 전송을 할 수 있다.
가장 많이 쓰이는 로거는 monolog/monolog 패키지라고 한다.
만들어서 쓰지 말라고 한다. 시간낭비.
"require": { "monolog/monolog" : "^1.24" }
composer.json 에 추가를 해주고 Bash에다가 composer update
<?php use Monolog\Logger; use Monolog\Handler\StreamHandler; // create a log channel $log = new Logger('name'); $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // add records to the log $log->addWarning('Foo'); $log->addError('Bar');
▶ PSR - 4 : AutoLoading Standard - 오토로딩 표준
오토로더는 필요에 따라 PHP 클래스, 인터페이스, 트레이트를 찾아 PHP 인터프리터로 불러오는 전략이다.
<?php include 'path/file1.php'; include 'path/file2.php'; include 'path/file3.php';
이 코드를 파일 상단에서 엄청 많이 보았을 것이다.
그러나 프로젝트 용량이 커질 때 계속 불러올 것인가 문제이다.
오토로더로 한번에 불러와서 간단하게 관리할 수 있게 한다.
컴포저에 의지하면 된다고 한다. ( npm 과 비슷함 )
<?php require 'vendor/autoload.php';
Monolog의 경우 다음과 같이 네임스페이스를 사용한다고 함.
<?php namespace Monolog\Handler; class FilterHandler extends AbstractHandler {
▶ PSR - 6 : Caching Interface - 캐싱 인터페이스
▶ PSR - 7 : HTTP Message Interface - HTTP 메세지 인터페이스
PHP에서 HTTP 데이터를 주고 받기 위한 클래스와 메소드, 인터페이스 등을 정의한 규약.
PSR-7 을 구현한 라이브러리 중 아마존이 후원하는 guzzle이 있으며 AWS의 PHP SDK는 guzzle을 사용하여 HTTP 처리를 하고 있다고 한다.
▶ PSR - 11 : Container Interface - 컨테이너 인터페이스
▶ PSR - 12 : Extended Coding Style Guide - 향상된 코딩 스타일 가이드
PSR-2 를 확장 및 대체하며 PSR-1 기준을 준수.
반응형'Programming > 프로그래밍' 카테고리의 다른 글
[Python] 함수 (0) 2020.10.01 [Python] 데이터형 (0) 2020.09.23 [PHP] Composer classmap 사용 (0) 2020.09.05 [C++] 객체와 클래스 연습문제 (2) (0) 2020.08.16 [C++] 객체와 클래스 연습문제 (1) (0) 2020.08.14