[PHP] Modern PHP 요약 1
모던 PHP 특징
http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0
- 네임스페이스
-- PHP 코드를 운영체제의 파일시스템 디렉터리 구조처럼 가상 계층 구조로 격리시켜준다.
-- 키워드 namespace, use
- 인터페이스
-- interface 를 정의하고 implements 해서 쓸 수 있다.
- 트레이트
-- 서로 상속관계로 묶기 애매하고 인터페이스로 공통 요소를 추상화 하기도 힘든 경우 사용
-- Trait을 사용할 클래스에 필요한 변수와 메써드를 정의하고, 각 클래스에서 use 키워드를 이용해서 trait 기능을 이용한다.
ex) 영화와 게임 클래스를 만든다고 하면, 둘 간에 상속관계도 없고, 추상화 할 요소도 없다. 각 클래스에 이름이라는 속성과 setName, getName 이라는 메써드만 공통적으로 사용된다면 아래와 같이 trait을 이용할 수 있다.
<?php trait MediaMetaData { protected $mediaName; public function setMediaName($mediaName) { $this->mediaName = $mediaName; } public function getMediaName() { return $this->mediaName; } } |
<?php class Movie { use MediaMetaData; } |
<?php $movieTest = new Movie(); $movieTest->setMediaName("Test Movie"); echo $movieTest->getMediaName(); |
- 제네레이터
-- Iterator 와 달리 요구가 있을 때마다 반복적으로 값을 계산해서 돌려주는 기능
-- 계산 결과를 메모리에 모두 올릴 필요가 없어 매우 효율적인 운영이 가능
아래 예제에서 arrayOld 의 경우 $length 크기의 배열을 생성해서 전달
반면에 arrayGen의 경우 foreach에서 호출시 마다 다음 값만 생성해서 전달
<?php function arrayOld($length) { $ret = []; for ($i = 0;$i < $length; $i++) { $ret[$i] = $i; } return $ret; } function arrayGen($length) { for ($i = 0;$i < $length; $i++) yield $i;
} $len = 100000 foreach (arrayOld($len) as $i) echo $i . PHP_EOL; foreach (arrayGen($len) as $i) echo $i . PHP_EOL; |
- 클로저
-- 생성 당시 자신의 주변 상태를 캡슐화한 함수 (함수 포인터라고 생각하면 된다.)
<?php $closure = function ($name) { return sprintf("Hi %s", $name); };
echo $closure("Tom") . PHP_EOL; |
- PHP 를 이용하여 http 서비스 테스트 하기
> php -S localhost:8000 |