php-annotated-december-2019
Roman Pronskiy가 쓰고 JetBrains에서 제공하는 월간 PHP Annotated 2019년 12월호의 번역본입니다.
이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.
⚡️ News & Releases
PHP 7.4.0
https://www.php.net/releases/7_4_0.php
오랫동안 기다렸던 새로운 인터프리터가 예정대로 릴리스 됐습니다. Release manager인 Derick Rethans와 Peter Kokot에게 깊은 감사를 표합니다.
주목할 만한 변화는 아래와 같습니다.
- Typed properties
- Arrow functions
- Limited return type covariance and argument type contravariance
- Null coalescing assignment operator (??)
- Unpack inside array
- Numeric literal separator
- Allow exceptions from __toString()
- OPcache preloading
- FFI – What you need to know about PHP 7.4 FFI
- 많은 기능이 deprecated 됐습니다. 그리고 몇가지 하위 호환이 깨지는 것이 있습니다.
전체 변경 사항은 php-src/UPGRADING에서 확인하시면 됩니다.
Benchmarks에 따르면, preloading 없이 약 11%까지 성능이 향상 됐습니다.
7.4의 릴리스로 PHP 7.1의 지원도 끝났습니다. PHP 7.2는 12월 19일 마지막 정규 업데이트 앞두고 있으며, 이후 2020년 12월까지는 보안 수정 사항만 있을 것입니다. 그러니 지금이 업그레이드하기 좋은 시점입니다. - 여러 환경에서 업그레이드 하는 방법
Updating PSR standards
10월 php annotated에서 PSR 표준을 업데이트 하는 방법을 고민 중이라는 소식을 전해드렸는데요. 투표가 끝났답니다. 두 단계로 업데이트 하는 계획이 선택됐습니다.: 모든 표준은 우선 v1.1로 업데이트 되면서 파라미터에 대한 타입 정의를 하게 되고, 이후 v2.0에서 리턴값 타입 힌트가 들어갑니다. 이와 같이 진행되는 이유는 여기서 확인하세요. (10월 php annotated에서 보셔도 좋습니다)
WordPress 5.3
https://wordpress.org/news/2019/11/kirk/
WordPress 5.3 “Kirk”가 소개됐습니다. Gutenberg라는 새로운 에디터(그나저나 Laravel에서도 사용할 수 있다는군요: VanOns/laraberg), “Twenty Twenty”라는 테마가 추가됐고, PHP 7.4 호환이 됩니다.
Drupal 8.8.0
https://www.drupal.org/blog/drupal-8-8-0
다른 무엇보다도 Composer를 Native로 지원한다고 합니다. Drupal을 설정하는데 third-party 프로젝트에 의존하지 않고 Composer를 사용하시면 됩니다.
PhpStorm 2019.3
https://blog.jetbrains.com/phpstorm/2019/11/phpstorm-2019-3-release/
Full PHP 7.4 Support, PSR-12, WSL, MongoDB, and more.
Xdebug 2.9.0
https://xdebug.org/announcements/2019-12-09
Xdebug 2.7에 비해 code coverage 속도가 250% 향상되었습니다. 전체 소식를 확인해보세요.
PHP versions statistics – 2019.2
https://blog.packagist.com/php-versions-stats-2019-2-edition/
Composer가 packagist.org에 연결할 때 보내는 데이터에 기반한 통계입니다. 새로운 버전이 꽤 빠르게 적용되고 있는데, PHP 7.3이 35.24% 정도 점유하고 있고, PHP 5는 9% 정도로 느리지만 감소하고 있습니다.
🐘 PHP Internals
[RFC] Weak maps
https://wiki.php.net/rfc/weak_maps
PHP 7.4는 WeakReference라는 특별한 클래스를 통해 weak refs를 지원합니다. 그러나 real-world 어플리케이션에서는, 개발자들은 WeakMap 같은 걸 원하겠죠. 그러나 현재의 WeakReference로는 구현할 수가 없습니다. 그래서 이 RFC에서 한가지 추가됐습니다.
$map = new WeakMap(); |
[RFC] Implement new DOM Living Standard APIs in ext/dom
https://wiki.php.net/rfc/dom_living_standard_api
PHP core extension인 ext/DOM에 DOM Living Standard를 반영하자는 제안이 만장일치로 accepted 됐습니다.
[RFC] Union Types 2.0
https://wiki.php.net/rfc/union_types_v2
Union Types 2.0이 accepted 되어 8.0에 반영됩니다. 파라미터, 리턴 타입, 프로퍼티 등 티입을 쓸 수 있는 곳에 사용할 수 있습니다.
🛠 Tools
Infection 0.15.0
https://infection.github.io/2019/09/29/whats-new-in-0.15.0/
Update for mutation testing tool in PHP. In this release: Codeception support, PHP 7.4, Symfony 4.4 and 5.0, a couple of new mutators.
lisachenko/z-engine
https://github.com/lisachenko/z-engine
FFI의 도움으로 zend_class_entry, zval 등 PHP의 내부 구조에 접근하고 수정할 수 있게 해주는 실험적인 라이브러리입니다. 이로써 몇가지 놀라운 작업을 런타임에 할 수 있습니다. 예를 들어, 특정 클래스에 인터페이스를 추가하거나 객체의 타입을 바꾸거나 연산자를 overload 할 수 있습니다.
krakjoe/ilimit
https://github.com/krakjoe/ilimit
이 extension은 어떤 callable이 실행되는 시간이나 소비하는 메모리를 제한하는 메소드를 제공합니다.
Twig 3.0
https://github.com/twigphp/Twig
작은 개선, 더 나은 성능, 더 깨끗한 코드로 업데이트 된 템플릿 엔진입니다.
fzaninotto/Faker 1.9
https://github.com/fzaninotto/Faker/releases/tag/v1.9.0
테스트용 데이터를 생성해주는 Faker가 100개가 넘는 개선을 해냅니다.
cekta/di
A decent PSR-11 implementation.
clue/phar-composer
https://github.com/clue/phar-composer
Composer로 관리되는 모든 PHP 프로젝트에 phar(php archive)를 생성하게 해주는 간단한 라이브러리입니다. 자세한 건 소개글을 읽어보세요.
phplrt/phplrt
https://github.com/phplrt/phplrt
A tool for creating parsers in PHP by specified grammar. For example, json5 parser.
Symfony
Symfony 4.4
https://symfony.com/blog/symfony-4-4-0-released
Symfony 5.0
https://symfony.com/blog/symfony-5-0-0-released
4.4에서 모든 변경점과 symfony/string와 symfony/notifier라는 두 새로운 컴포넌트를 소개합니다. Symfony의 lead 개발자인 Fabien Potencier가 Symfony Notifier를 제공합니다.
A week of Symfony #675 (2 – 8 December 2019)
https://symfony.com/blog/a-week-of-symfony-675-2-8-december-2019
Preloading in PHP 7.4 and Symfony 4.4.
https://symfony.com/blog/new-in-symfony-4-4-preloading-symfony-applications-in-php-7-4
PHP 7.4에서 적용된 Preloading을 소개하고 Symfony에서 설정하는 법을 알려줍니다.
Laravel
Creating a Laravel package
https://johnbraun.blog/posts/creating-a-laravel-package-1
라라벨 패키지를 만드는 tutorial 시리즈입니다.
- Package basics: requirements, service providers, testing
- Facades, artisan commands, custom configuration
- Models, migrations, App\User relations
- Routes, controllers, views, assets
- Middleware, events & listeners, mail, broadcasting
How to Set Up a Scalable Laravel 6 Application
관리형 데이터베이스와 오브젝트 스토리지를 사용한, 확장 가능한 Laravel 6 어플리케이션 만들기.
Laravel Beyond CRUD
https://stitcher.io/blog/laravel-beyond-crud
평균보다 큰 규모의 Laravel 프로젝트에서 일하는 PHP 개발자를 위한 시리즈입니다. 한달 동안 여러 글이 올라왔습니다. Models with the state pattern, Managing Domains, Entering the application layer, View models…
글쓴이 Brent는 트위터로 PHP 소식을 많이 전달하기도 하고, 월간 newsletter도 발행합니다.
On moving the application to Laravel Vapor
https://usefathom.com/news/moved-to-vapor
Heroku에 대한 경험과 왜 Laravel Vapor로 이동하기로 결정했는지를 이야기 합니다. 앞으로 블로그에서 Vapor 관련 팁을 공유 할 예정이라고 합니다.
이 글 끝에는 Laravel Vapor로 운영하는데 도움이 되는 14가지 팁을 제공합니다.
Form Requests – more than validation
https://pociot.dev/22-laravel-form-requests-more-than-validation
Streamlining Laravel
https://jasonmccreary.me/articles/changes-to-streamline-laravel/
향후 라라벨에서 변경됐으면 하는 5가지를 제안합니다.
Astrocasts – Let’s start building a Command Bus with Laravel and Tactician 2.x!
https://www.youtube.com/watch?v=qjhwXKygbjY
Zend/Laminas
Laminas transition update
https://www.zend.com/blog/laminas-transition-update
Zend의 새로운 이름인 Laminas에 몇가지 변경 사항이 있답니다. 2020년 1월에 정식 버전이 릴리스됩니다.
Yii
Yii 2 application optimization
https://2amigos.us/blog/yii2-application-optimization
Yii 2.0.30, extensions, and Yii 3
https://opencollective.com/yiisoft/updates/yii-2-0-30-extensions-and-yii-3
PHP 7.4 will be the minimal required version for Yii 3.
https://forum.yiiframework.com/t/upping-requirements-to-php-7-4/127930
hunwalk/yii2-basic-firestarter
https://github.com/hunwalk/yii2-basic-firestarter
A modified version of the basic template with pre-configured features that can be used to quickly get started on a project.
Async PHP
DriftPHP
ReactPHP와 Symfony 컴포넌트를 기반으로 하는 PHP 프레임웍입니다. - Demo application
clue/reactphp-ami
https://github.com/clue/reactphp-ami
https://clue.engineering/2019/introducing-reactphp-ami
Creating a RESTful API with ReactPHP: Protected Routes
https://www.youtube.com/watch?v=Y0Ve5LMr5hA
기타 읽을 만한 글
How to quickly update PHPUnit from 4 up to PHPUnit 8
https://www.tomasvotruba.cz/blog/2019/11/04/still-on-phpunit-4-come-to-phpunit-8-together-in-a-day/
PHPUnit 버전을 4에서 8까지 올리는 과정을 설명합니다.
- upgrade PHP 5.3 → 5.6
- upgrade PHPUnit 4 → 5
- upgrade PHP 5.6 → 7.0
- upgrade PHPUnit 5 → 6
- upgrade PHP 7.0 → 7.1
- upgrade PHPUnit 6 → 7
- upgrade PHP 7.1 → 7.2
- upgrade PHPUnit 7 → 8
Serverless PHP FAQ
https://mnapoli.fr/serverless-php-faq/
Bref로 serverless PHP 어플리케이션을 구성하면서 자주 받는 질문과 답변입니다.
Benchmarks of 4 ways to generate UUID in PHP
https://jolicode.com/blog/uuid-generation-in-php
4가지 방식의 UUID 생성 방식의 성능을 비교합니다.
- PECL extension uuid
- the new polyfill symfony/polyfill-uuid
- a popular package ramsey/uuid
- libuuid binding via FFI jolicode/ffi-uuid
Videos
Laravel EU 2019
https://www.youtube.com/playlist?list=PLMdXHJK-lGoDhWZ6YJW5B79CDoHWZwDN1
video PHP.Barcelona 2019
https://www.youtube.com/playlist?list=PLrNlZtxTX8XTw7YLlvLAxviKXIFtVFi9I
video Free course on Blackfire.io from SymfonyCasts
https://symfonycasts.com/screencast/blackfire
Podcasts
🔈 Laravel Snippet #18: Clear Writing, Great Quality, Low Pain Tolerance – Another episode in the series on how to make money with open source.
🔈 PHP Internals News podcast #35 – With Scott Arciszewski about recent vulnerability in PHP-FPM, and cryptography in PHP.
🔈 PHP Internals News #37 – PHP 7.4 Celebrations! – Developers talk about their own favorite PHP 7.4 features.
5 Ways to Increase PHP Performance + 🔈 The Undercover ElePHPant #2 with Marco “Ocramius” Pivetta.
PHP의 성능을 높이는 5가지 방법이라는 글에 관한 이야기
4 Considerations When Running PHP Applications On Multiple Servers + 🔈 The Undercover ElePHPant #3 with Larry Garfield and Robert Douglass.
PHP를 여러 서버에서 구동할 때 고려해야할 4가지에 관한 이야기.
One more thing
symfony/thanks로 패키지 개발자들을 지원해주세요.