php-annotated-monthly-july-2019

Php_annotated_monthly 이미지

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일이라서 이미 투표는 끝나고 마지막 하나만 빼고 통과됐습니다).

RFC는 없지만 흥미로운 변화가 추가되기도 했습니다.

  • proc_open이 이제 shell을 띄우지 않고도 프로그램을 실행시킬 수 있습니다. Nikita Popov의 트윗과 반응을 확인하세요.
  • 이상한 배열 표현식을 쓰면 이제 notice를 던질 것이니 주의하세요.
1
2
3
4
5
6
7
$null = null;
var_dump($null[0]); // NULL

$int = 42;
var_dump($int['foo']); // NULL

var_dump(true[0] === false[0]); // true

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입니다. 저는 여지껏 이런 것도 몰랐고…

1
2
3
4
5
6
7
8
$array = [0, 1, 2, 3];
unset($array[3], $array[2]);
$arrayCopy = $array;
$arrayCopy[] = 2;

// If the proposal is accepted, the following statement will be true.
// Currently, the arrays below are not equivalent.
assert($arrayCopy === [0, 1, 2]);

[RFC] Strict operators directive

[RFC] Strict operators directive

PHP는 대부분의 연산에서 알아서 형 변환을 해주는데요. 비교할 두 값의 형이 맞지 않거나 연산자에 맞지 않는 형일 때 TypeError를 던지도록 하는 RFC가 나왔습니다. RFC 대로라면 declare(strict_operators=1); 처럼 사용하면 됩니다.

그런데 PHP 7.4에서는 너무 많은 변화가 발생할 수 있어서 PHP 8에나 넣을지 고려한다고 합니다.

Strict operators directive img

Numeric Literal Separator.

  • PHP Internals News #17: With Theodore Brown and Bishop Bettini

https://phpinternals.news/17

숫자 리터럴에 자릿수를 표현하는 언더바(_)를 넣자는 RFC입니다.

1
2
3
$threshold = 1_000_000_000;  // a billion!
$testValue = ‪107_925_284.88; // scale is hundreds of millions
$discount = 135_00; // $135, stored as cents

개인적으로 마음에는 안들지만…PHP 7.4에 이미 구현되었습니다.

Strict Operator Directive.

  • PHP Internals News #18: With Arnold Daniels

https://phpinternals.news/18

위에서 언급한 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

https://afilina.com/null-hell

생성자에 넣을 값 중에 optional한 값이 많을 때 null로 채워야 하는 상황에 관한 이야기입니다. 결론은 설계 좀 잘하자.

Stop using DateTime

https://blog.nikolaposa.in.rs/2019/07/01/stop-using-datetime/

가능하면 DateTime 대신 DateTimeImmutable을 씁시다!

1
2
3
4
5
6
$startedAt = new DateTime('2019-06-30 10:00:00');

$finishedAt = $startedAt->add(new DateInterval('PT3M'));

var_dump($startedAt->format('Y-m-d H:i:s')); //2019-06-30 10:03:00 ❌
var_dump($finishedAt->format('Y-m-d H:i:s')); //2019-06-30 10:03: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.