1. 1. ⚡️ News & Releases
    1. 1.1. PHP 7.4.0
    2. 1.2. Updating PSR standards
    3. 1.3. WordPress 5.3
    4. 1.4. Drupal 8.8.0
    5. 1.5. PhpStorm 2019.3
    6. 1.6. Xdebug 2.9.0
    7. 1.7. PHP versions statistics – 2019.2
  2. 2. 🐘 PHP Internals
    1. 2.1. [RFC] Implement new DOM Living Standard APIs in ext/dom
    2. 2.2. [RFC] Union Types 2.0
  3. 3. 🛠 Tools
    1. 3.1. Infection 0.15.0
    2. 3.2. lisachenko/z-engine
    3. 3.3. krakjoe/ilimit
    4. 3.4. Twig 3.0
    5. 3.5. fzaninotto/Faker 1.9
    6. 3.6. cekta/di
    7. 3.7. clue/phar-composer
    8. 3.8. phplrt/phplrt
  4. 4. Symfony
    1. 4.1. Symfony 4.4
    2. 4.2. Symfony 5.0
    3. 4.3. A week of Symfony #675 (2 – 8 December 2019)
    4. 4.4. Preloading in PHP 7.4 and Symfony 4.4.
  5. 5. Laravel
    1. 5.1. Creating a Laravel package
    2. 5.2. How to Set Up a Scalable Laravel 6 Application
    3. 5.3. Laravel Beyond CRUD
    4. 5.4. On moving the application to Laravel Vapor
    5. 5.5. Form Requests – more than validation
    6. 5.6. Streamlining Laravel
    7. 5.7. Astrocasts – Let’s start building a Command Bus with Laravel and Tactician 2.x!
  6. 6. Zend/Laminas
    1. 6.1. Laminas transition update
  7. 7. Yii
    1. 7.1. Yii 2 application optimization
    2. 7.2. Yii 2.0.30, extensions, and Yii 3
    3. 7.3. PHP 7.4 will be the minimal required version for Yii 3.
    4. 7.4. hunwalk/yii2-basic-firestarter
  8. 8. Async PHP
    1. 8.1. DriftPHP
    2. 8.2. clue/reactphp-ami
    3. 8.3. Creating a RESTful API with ReactPHP: Protected Routes
  9. 9. 기타 읽을 만한 글
    1. 9.1. How to quickly update PHPUnit from 4 up to PHPUnit 8
    2. 9.2. Serverless PHP FAQ
    3. 9.3. Benchmarks of 4 ways to generate UUID in PHP
  10. 10. Videos
    1. 10.1. Laravel EU 2019
    2. 10.2. video PHP.Barcelona 2019
    3. 10.3. video Free course on Blackfire.io from SymfonyCasts
  11. 11. Podcasts
    1. 11.1. 🔈 Laravel Snippet #18: Clear Writing, Great Quality, Low Pain Tolerance – Another episode in the series on how to make money with open source.
    2. 11.2. 🔈 PHP Internals News podcast #35 – With Scott Arciszewski about recent vulnerability in PHP-FPM, and cryptography in PHP.
    3. 11.3. 🔈 PHP Internals News #37 – PHP 7.4 Celebrations! – Developers talk about their own favorite PHP 7.4 features.
    4. 11.4. 5 Ways to Increase PHP Performance + 🔈 The Undercover ElePHPant #2 with Marco “Ocramius” Pivetta.
    5. 11.5. 4 Considerations When Running PHP Applications On Multiple Servers + 🔈 The Undercover ElePHPant #3 with Larry Garfield and Robert Douglass.
  12. 12. One more thing

php-annotated-december-2019

Php_annotated_monthly 이미지

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 RethansPeter Kokot에게 깊은 감사를 표합니다.

주목할 만한 변화는 아래와 같습니다.

전체 변경 사항은 php-src/UPGRADING에서 확인하시면 됩니다.

Benchmarks에 따르면, preloading 없이 약 11%까지 성능이 향상 됐습니다.

7.4의 릴리스로 PHP 7.1의 지원도 끝났습니다. PHP 7.2는 12월 19일 마지막 정규 업데이트 앞두고 있으며, 이후 2020년 12월까지는 보안 수정 사항만 있을 것입니다. 그러니 지금이 업그레이드하기 좋은 시점입니다. - 여러 환경에서 업그레이드 하는 방법

Updating PSR standards

https://github.com/php-fig/fig-standards/pull/1195/files?short_path=ef021a0#diff-ef021a0820876c95b7b6ec1d4007fe75

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에서 한가지 추가됐습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$map = new WeakMap();
$obj = new stdClass();
$map[$obj] = 42;
var_dump($map);
// object(WeakMap)#1 (1) {
// [0]=>
// ["key"] => object(stdClass)#2 (0) {}
// ["value"] => int(42)
// }
// }

// The object is destroyed here, and the key is automatically removed from the weak map.
unset($obj);
var_dump($map);
// object(WeakMap)#1 (0) {
// }

[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

https://github.com/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/stringsymfony/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 시리즈입니다.

  1. Package basics: requirements, service providers, testing
  2. Facades, artisan commands, custom configuration
  3. Models, migrations, App\User relations
  4. Routes, controllers, views, assets
  5. Middleware, events & listeners, mail, broadcasting

How to Set Up a Scalable Laravel 6 Application

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-scalable-laravel-6-application-using-managed-databases-and-object-storage

관리형 데이터베이스와 오브젝트 스토리지를 사용한, 확장 가능한 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 생성 방식의 성능을 비교합니다.

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로 패키지 개발자들을 지원해주세요.

symfony/thanks 예시