php-annotated-monthly-july-2019
JetBrains에서 제공하는 월간 PHP Annotated Monthly 2019년 7월호입니다.
이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.
News & Releases
PHP 7.3.7
나왔습니다.
PHP 7.2.20
나왔고요.
PHP 7.4.0 alpha 3
마지막 알파 버전이 나왔습니다. UPGRADING 문서를 보시면 모든 새로운 feature 목록을 보실 수 있습니다.
What’s new in PHP 7.4, What’s New in PHP 7.4 (Features, Deprecations, Speed) 등에서 더 많은 정보를 확인하세요.
PHP 7.4에서 성능을 꽤 향상 시켰음에도 불구하고, PHP 8이야 말로 PHP의 성능 향상을 이루는 진정한 이정표가 될 것이라고 합니다. JIT이 포함되었기 때문이죠.
7월 22일에 기능 확정이 되므로 아래 투표 중인 기능만이 더 추가될 가능성이 있습니다(..라고 쓰여있지만 제가 번역하는 날짜가 22일이라서 이미 투표는 끝나고 마지막 하나만 빼고 통과됐습니다).
- Deprecations for PHP 7.4
- Escape PDO “?” parameter placeholder
- Deprecate curly brace syntax for accessing array elements and string offsets
- Add str_starts_with(), str_ends_with() and related functions.
RFC는 없지만 흥미로운 변화가 추가되기도 했습니다.
- proc_open이 이제 shell을 띄우지 않고도 프로그램을 실행시킬 수 있습니다. Nikita Popov의 트윗과 반응을 확인하세요.
- 이상한 배열 표현식을 쓰면 이제 notice를 던질 것이니 주의하세요.
$null = null; |
PHP Internals
[RFC] Normalize arrays’ “auto-increment” value on copy on write
https://wiki.php.net/rfc/normalize-array-auto-increment-on-copy-on-write
배열을 복사해도 자동 증가하는 키를 원본과 동일하게 맞추자는 RFC입니다. 저는 여지껏 이런 것도 몰랐고…
$array = [0, 1, 2, 3]; |
[RFC] Strict operators directive
[RFC] Strict operators directive
PHP는 대부분의 연산에서 알아서 형 변환을 해주는데요. 비교할 두 값의 형이 맞지 않거나 연산자에 맞지 않는 형일 때 TypeError를 던지도록 하는 RFC가 나왔습니다. RFC 대로라면 declare(strict_operators=1);
처럼 사용하면 됩니다.
그런데 PHP 7.4에서는 너무 많은 변화가 발생할 수 있어서 PHP 8에나 넣을지 고려한다고 합니다.
Numeric Literal Separator.
- PHP Internals News #17: With Theodore Brown and Bishop Bettini
숫자 리터럴에 자릿수를 표현하는 언더바(_)를 넣자는 RFC입니다.
$threshold = 1_000_000_000; // a billion! |
개인적으로 마음에는 안들지만…PHP 7.4에 이미 구현되었습니다.
Strict Operator Directive.
- PHP Internals News #18: With Arnold Daniels
위에서 언급한 Strict Operator Directive에 관해 이야기 합니다.
tools
자세한 내용은 원문 블로그를 통해 확인하세요.
cycle/orm
- A powerful ORM designed specifically for long-running PHP apps. Full documentation is ready, with an example of dynamic schema and relations.
SerafimArts/pipe
- An object-oriented pipe operator implementation for function call chains.
helhum/dotenv-connector
- A Composer plugin that makes values from a .env file available as environment variables.
thephpleague/commonmark
- A markdown parser. Overview of the 1.0 release.
sebastianfeldmann/phpbu
- A database and file backups utility that can encrypt and send backups to cloud storages.
localheinz/http-method
- A constants for HTTP request methods.
leocarmo/circuit-breaker-php
- A Circuit Breaker pattern implementation for PHP. As an alternative also see ackintosh/ganesha.
Symfony
자세한 내용은 원문 블로그를 통해 확인하세요.
Symfony Local Web Server, 6 months later
New Symfony Core Team Member: Yonel Ceruto.
Improvements for Twig: Better White Space Control, Simpler Macros, Filter, Map and Reduce Features.
Efficient testing with fixtures on Symfony 4
Migrating Symfony Project to Kubernetes
Laravel
자세한 내용은 원문 블로그를 통해 확인하세요.
Improving assertions on Laravel fakes
A dive into Laravel’s TestCase to decrease the Kernel boot time by ~50% during a test suite run.
🎥 Laravel Core Adventures - Accessors & Mutators
🔈 Taylor’s Laravel Snippet #14 podcast - Laravel Live UK, whereHasMorph, laravel/ui, front-end authorization, performance, and Lumen.
🎥 Event Sourcing with Laravel and EventSauce
Async PHP
자세한 내용은 원문 블로그를 통해 확인하세요.
ReactPHP 1.0 LTS
- It’s 7 years since the first ReactPHP v0.1.0 release. Now the team has announced releases of 1.0 versions for reactphp/dns, reactphp/cache packages, and reactphp/react meta-package. It means that all the main components in ReactPHP are now stable. The release with LTS marks that they will be supported for at least the next 2 years.
🎥 Creating a RESTful API with ReactPHP: Plans and First Steps, What is a RESTful API?, Adding routes, Refactoring to controllers, Dummy endpoints, Workflow improvements
Using ReactPHP to run Drupal tasks
swoft-cloud/swoft 2.0
- A framework based on Swoole for developing microservices, inspired by Spring Cloud. Implements PSR-7, PSR-14, PSR-15, and leverages AOP. See a short introductory post.
Security
nbs-system/snuffleupagus
https://github.com/nbs-system/snuffleupagus
runtime에 잠재적으로 위험한 코드 실행을 막아주는 extension입니다.
Abusing PHP query string parser to bypass IDS, IPS, and WAF.
https://www.secjuice.com/abusing-php-query-string-parser-bypass-ids-ips-waf/
PHP query string parser로 IDS/IPS, 어플리케이션 방화벽을 뚫는 방법을 소개합니다.
Magento 2.3.1: Unauthenticated Stored XSS to RCE.
https://blog.ripstech.com/2019/magento-rce-via-xss/
기타 읽을 만한 글
Clean Code concepts adapted for PHP.
https://github.com/jupeter/clean-code-php
Robert C. Martin의 책인 Clean Code 의 내용을 PHP 버전으로 옮겨놓은 것입니다.
Null Hell and How to Get Out of It
생성자에 넣을 값 중에 optional한 값이 많을 때 null로 채워야 하는 상황에 관한 이야기입니다. 결론은 설계 좀 잘하자.
Stop using DateTime
https://blog.nikolaposa.in.rs/2019/07/01/stop-using-datetime/
가능하면 DateTime 대신 DateTimeImmutable을 씁시다!
$startedAt = new DateTime('2019-06-30 10:00:00'); |
You may not need a query bus
https://matthiasnoback.nl/2019/06/you-may-not-need-a-query-bus/
의미없는 query bus를 태우는 대신 명시적으로 의존성을 추가하자는 주장. 댓글에 반론도 계속 이어지고 있습니다.
Mutation testing - we are testing tests
https://sarvendev.com/en/2019/06/mutation-testing-we-are-testing-tests/
오류 기반(?) 테스트 프레임워크인 Infection를 소개합니다.
mutation testing에서 가장 유명하다고 합니다.
A decent PHP Wishlist
https://medium.com/@liamhammett/my-php-wishlist-dd74c9499591
누군가의 PHP 위시리스트!
Intro Guide to Dockerfile Best Practices
https://blog.docker.com/2019/07/intro-guide-to-dockerfile-best-practices/
Audio/Video
자세한 내용은 원문 블로그를 통해 확인하세요.
🎥 PHP fwdays’19, Kyiv (English talks only)
🎥 Dutch PHP Conference 2019, Amsterdam
🎥 PHPDay 2019, Verona
🎥 PHP Town Hall Episode 67 - On Zend Framework 3 and Laminas with Adam Culp.
🔈 php[arch] podcast #21: Serverless PHP, Array Functions, and Data Structures.
🔈 That Podcast Episode 60 - On Twig, Drupal, and Sculpin with Oliver Davies.
🔈 That Podcast Episode 61 - On a new Symfony’s HTTP Client component with Nicolas Grekas.