교육/세미나
[PHP / G Junior] Modern PHP & PSR
학학이
2016. 9. 12. 00:46
2016.09.07 개발 세미나
Seminar Contents
Modern PHP ?
- 특정한 규칙이 있는건 아니다.
- 새로운 PHP 프레임워크들은 Modern PHP를 따르고 있다.
- 즉, Modern PHP를 배워야한다.
- 추상화, CLI, 의존성 주입, ORM 같은 비교적 새로운 개념, 기술을 사용할 수 있다.
- 기존 PHP에서 없어서 불편했던 점들
Modern PHP 특징
- CLI 기반
- CI 4 버전 이후는 모두 CLI 명령어로 개발해야 한다.
- 반복 작업 자동화
- 컴포넌트화 / 컴포넌트 기반
- Composer, NPM, Maven
- DI
- Composer
PSR
- PHP 표준 권고안. 공식 표준은 아니다. 단지 권고일 뿐이다.
- Accept 된건 6개
- http://www.php-fig.org/psr/
- PHP에 많은 프레임워크가 있지만, 모두 PSR을 지킨다면 모두 비슷해질 것.
- 즉, Laravel, CI, CakePHP 나 PHP 언어를 사용하기 때문에 기본 규약은 같다.
More Information
Modern PHP
- 현대적인 PHP
- PHP는 JAVA, JS, Python 등 인기 높은 개발언어에 비해 구식의 스타일을 갖고 있었다.
이것을 깨고 최신 스타일로 코딩하는 것이 Modern PHP - http://modernpug.github.io/php-the-right-way/
- PHP는 JAVA, JS, Python 등 인기 높은 개발언어에 비해 구식의 스타일을 갖고 있었다.
- Feature
- Namespace
- 같은 이름을 가진 클래스를 구분해주는 구분자
- http://haruair.com/blog/2843
- Interface
- Java와 유사함. 구현만 하고 정의는 자식 클래스에서
- http://88240.tistory.com/231
- Traits
- 단일 상속 언어를 위한 코드 재사용 기법
- http://php.net/manual/kr/language.oop5.traits.php
- Generators
- Closures
- Built-in HTTP server
- 간단한 테스트용 서버
- Namespace
- http://www.yes24.com/24/goods/22380599?scode=032&OzSrank=1
Component Based
- CBD
- SW 개발을 통채로 하지 않고 각 기능별로 세분화하여 개발
- 각 기능별로 개발된 SW를 합쳐 전체를 개발
- Composer
- PHP의 대표적인 컴포넌트 기반 개발 도구
- Node.js 의 NPM을 생각하면 쉽다.
NPM 의 각 모듈들은 처음부터 끝까지 다 개발하지 않고 다른 잘 만들어진 모듈을
require 해서 개발한다.
PSR-1
PSR-1 은 coding convention 같은 느낌이다.
강제성은 없지만, 따로 coding convention 이 없다면 이 권고안을 따르는게 좋을 것 같다.
Files MUST use only <?php and <?= tags.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <? // Bad
$var = 2;
?> <?php // Good
$var = 1;
?> // 이건 1을 리턴한다.
<?= $var ?>
| cs |
간혹 이게 당연하다고 생각할 수 있지만, PHP short tags 라고 <?php ?> 를 <? ?> 로 사용하는 경우가 있는데 하지 말아야한다.
Files MUST use only UTF-8 without BOM for PHP code.
UTF-8 포맷을 쓰자는 거다. 다른 곳에서도 잘 모를땐 charset을 UTF-8을 기본으로 하자.
Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php // Bad
function func()
{
// function contents
}
// Good
if ( ! function_exists('func') ) {
function func()
{
// function contents
}
}
?> | cs |
영어라 정확한 의미는 모르겠으나. 부작용? 을 대비해서 조건부 선언을 하라는 것이다.
PHP에서는 다른 .php 파일을 include 하는데 여러번 include 되서 에러가 날 수 있기 때문에 다음과 같이 조건부 선언을 한다.
Namespaces and classes MUST follow an "autoloading" PSR: [PSR-0, PSR-4].
1
2
3
4
5
6
7
8
9
10
11
| <?php // PHP 5.3 and later: namespace Vendor\Model;
class Hak
{
}
?> | cs |
또한, " Class names MUST be declared in StudlyCaps " 클래스 명명 규칙은 StudlyCaps 을 따르는데
이에 대한 정보가 적다. 확실한건 첫 시작은 대문자로 시작한다.
Class constants MUST be declared in all upper case with underscore separators.
1
2
3
4
| <?php const AUTH_USER= 'hak';
const NAME = 'sanghaklee';
?> | cs |
const, 즉 상수를 선언할 때는 대문자로 하고 단어와 단어 사이는 _ 로 이어준다.
This guide intentionally avoids any recommendation regarding the use of $StudlyCaps, $camelCase, or $under_score property names.
1
2
3
4
5
6
7
8
| <?php class Hak
{
$My_name = 'hak';
$myAge = 26;
$my_number = '010';
}
?> | cs |
프로퍼티에 대한 규칙은 각자 정한다.
Method names MUST be declared in camelCase().
1
2
3
4
5
| <?php function myFunc()
{
}
?> | cs |
메소드는 낙타 표기법. 소문자로 시작하고 단어와 단어는 첫 단어가 대문자로 시작한다.