교육/세미나

[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 

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
메소드는 낙타 표기법. 소문자로 시작하고 단어와 단어는 첫 단어가 대문자로 시작한다.