1. 1. ⚡️ News & Releases
    1. 1.1. PHP 7.4.0 RC5
    2. 1.2. PHP 7.3.11, 7.2.24, 7.1.33
    3. 1.3. Xdebug 2.8.0
  2. 2. 🐘 PHP Internals
    1. 2.1. [RFC] Union Types 2.0
    2. 2.2. [RFC] Deprecate Backtick Operator (V2)
    3. 2.3. [RFC] Implement new DOM Living Standard APIs in ext/dom
  3. 3. 🛠 Tools
    1. 3.1. mougrim/php-xdebug-proxy
    2. 3.2. webmozarts/console-parallelization
    3. 3.3. php-defer/php-defer
    4. 3.4. spatie/phpunit-snapshot-assertions
    5. 3.5. matteosister/GitElephant
    6. 3.6. danog/MadelineProto
  4. 4. Symfony
    1. 4.1. You may have memory leaking from PHP 7 and Symfony tests.
    2. 4.2. A Week of Symfony #670 (28 October – 3 November 2019)
  5. 5. Laravel
    1. 5.1. Why you should stick to the default Laravel architecture.
    2. 5.2. Crafting maintainable Laravel applications
    3. 5.3. Deploying Laravel Projects to Kubernetes.
    4. 5.4. 🔈 ‎Laravel Lunch Break
    5. 5.5. 🎥 Astrocasts: Event Sourcing with Laravel and EventSauce.
    6. 5.6. 🎥 A series of videos on How to use TDD to build a REST API in Laravel
    7. 5.7. 🎥 Screencasts on creating laravel-shift/blueprint.
  6. 6. Zend/Laminas
  7. 7. 🌀 Async PHP
    1. 7.1. seregazhuk/php-watcher
    2. 7.2. Building RESTful API With ReactPHP
    3. 7.3. apisearch-io/symfony-react-server
  8. 8. 기타 읽을 만한 글
    1. 8.1. What is garbage collection in PHP
    2. 8.2. An example of creating a custom inspection in PhpStorm
    3. 8.3. On using the @mixin tag in DоcBlock
    4. 8.4. The value of the void typehint in PHP
    5. 8.5. Embracing simplicity in your code
    6. 8.6. Solving the N+1 problem in ORMs.
    7. 8.7. PHP: Past and Future
    8. 8.8. Examples of using FFI from PHP 7.4
  9. 9. 🎥 Videos
    1. 9.1. PHP Yorkshire 2019 videos
    2. 9.2. PHP Serbia 2019 videos
    3. 9.3. Beachcasts: Store sensitive data in environment variables using phpdotenv
    4. 9.4. Taylor said
    5. 9.5. The Undercover ElePHPant
    6. 9.6. PHP Internals News #32
    7. 9.7. Interviews from php[world]: Cal Evans, Taylor Otwell, Samantha Quiñones, and Gary Hockin.
    8. 9.8. Voices of the ElePHPant

php-annotated-november-2019

Php_annotated_monthly 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 월간 PHP Annotated Monthly 2019년 11월호의 번역본입니다.

이 중에서 몇 가지 제 취향껏 골라 그 안의 내용도 좀 뒤져보고 개발새발 번역해서 소개합니다.


⚡️ News & Releases

PHP 7.4.0 RC5

PHP 7.4는 11월 말 쯤 하나의 RC 만을 남겨두고 있습니다. What’s new in PHP 7.4를 확인해보세요.

PHP 7.3.11, 7.2.24, 7.1.33

https://www.php.net/ChangeLog-7.php#7.3.11
https://www.php.net/ChangeLog-7.php#7.2.24
https://www.php.net/ChangeLog-7.php#7.1.33

이 업데이트는 심각한 취약성(CVE-2019-11043)을 문제 해결을 포함합니다. 특정 형식으로 request하면 원격 코드 실행이 가능해집니다. PHP-FPM을 사용하고 있다면 당장 업데이트 하세요. 더 자세한 내용을 보고 싶으시면 이 취약성을 분석한 글을 더 읽어보세요.

그나저나 PHP 5.* 버전은 오랫동안 지원되지 않고 있고, 당연히 이 수정사항이 반영되지 않았답니다.

Xdebug 2.8.0

https://xdebug.org/#2019-10-31

PHP 7.4를 완벽히 지원하고 여러 버그 수정과 기능 개선이 있었습니다.

🐘 PHP Internals

[RFC] Union Types 2.0

https://wiki.php.net/rfc/union_types_v2#vote

Union Types 2.0 RFC가 거의 만장일치로 진행되고 있다는 소식입니다.

그러나 투표 기간이 2019-10-25 ~ 2019-11-08. 현 시점(11월 9일)에는 Status: Accepted 상태입니다. PHP 8.0에서 만나요.
더 궁금하시다면 Nikita Popov가 이야기하는 팟캐스트(🔈 PHP Internals News #33)에서 들어보세요.

그리고 지난 소식에서 들려드린 것처럼, 토론과 스펙 작업을 GitHub에서 진행했던 것이 전반적으로 성공적이었다고 합니다. 그리고 Nikita는 이런 식의 작업 흐름(GitHub RFC workflow)을 optional/test 모드로 허락할 것을 제안했습니다.

[RFC] Deprecate Backtick Operator (V2)

PHP에서 백틱(backticks, `) 문자를 사용하면 shell_exec()를 실행한 것과 동일한 효과를 볼 수 있습니다. 백틱 안의 문자열을 커맨드로 인식하고 쉘 안에서 실행할 수 있는 것이죠. 이 기능을 deprecate 시키자는 제안이 투표 중에 있습니다(반대가 많네). 이를 제안한 Mark Randall이 참여한 팟캐스트 🔈 PHP Internals News #34에서 더 자세한 이야기를 들어보세요.

[RFC] Implement new DOM Living Standard APIs in ext/dom

https://wiki.php.net/rfc/dom_living_standard_api

Benjamin Eberlei는 PHP core extension인 ext/DOM을 DOM Living Standard를 반영하자는 제안을 올렸습니다. 🔈 PHP Internals News #31에서 더 자세한 이야기를 들어보세요.

🛠 Tools

mougrim/php-xdebug-proxy

https://github.com/mougrim/php-xdebug-proxy

여러 유저가 Xdebug를 동시에 사용하기 위해선 Proxy가 필요한데요. 이를 Amp(non-blocking concurrency framework)을 활용해 PHP로 만든 것입니다.

webmozarts/console-parallelization

https://github.com/webmozarts/console-parallelization

symfony/console을 병행으로 실행할 수 있게 해주는 패키지입니다. 이런 식으로…

$ bin/console import:movies --processes 2

php-defer/php-defer

https://github.com/php-defer/php-defer

Go의 defer()의 PHP 버전. 이 함수에 전달된 콜백은 현재 scope을 빠져나올 때 실행됩니다. 내부에는 destructor를 사용했습니다. 사실 새로운 아이디어는 아니고 이미 phplang/scope-exit에서 구현된 바 있습니다.

spatie/phpunit-snapshot-assertions

https://github.com/spatie/phpunit-snapshot-assertions

PHPUnit에서 snapshot-testing을 지원하는 툴입니다. 객체의 상태를 확인해서 이전 테스트와 달라진 것이 있는지 확인합니다.

matteosister/GitElephant

https://github.com/matteosister/gitelephant

Git repository를 php로 다루기 위한 추상 레이어.

danog/MadelineProto

https://github.com/danog/MadelineProto

Telegram의 MTProto protocol을 위한 Async PHP client/server API입니다. Bot API 없이 Telegram과 인터렉션을 할 수 있습니다.

Symfony

Symfony 5: The Fast Track

https://www.kickstarter.com/projects/fabpot/symfony-5-the-fast-track

Fabien Potencier가 새로운 책을 쓰기 위해 crowdfunding을 진행했습니다. Symfony 5 기반의 어플리케이션을 기초부터 프로덕션 레벨까지 만드는 방법을 다룹니다.

You may have memory leaking from PHP 7 and Symfony tests.

https://jolicode.com/blog/you-may-have-memory-leaking-from-php-7-and-symfony-tests

A Week of Symfony #670 (28 October – 3 November 2019)

https://symfony.com/blog/a-week-of-symfony-670-28-october-3-november-2019

Laravel

Laravel beyond CRUD

https://stitcher.io/blog/laravel-beyond-crud

Laravel로 큰 어플리케이션을 어떻게 만들 수 있는가에 대한 책을 위해 정리하는 블로그입니다. 첫 챕터는 Domain-oriented Laravel이고, 그 안에는 PhpStorm에서 코드를 리팩토링하는 방법이 나와있습니다.

Why you should stick to the default Laravel architecture.

https://schlein.net/blog/stick-to-the-default

Crafting maintainable Laravel applications

https://jasonmccreary.me/articles/crafting-maintainable-laravel-applications/

유지보수를 지속할 수 있는 Laravel 어플리케이션 만들기

  • Stay Current
  • Adopt the standards
  • Vanity namespaces
  • Default the structure
  • Where things go
  • Managing packages
  • Smooth bindings
  • Configuring Configs
  • Avoid overwriting
  • Grok the framework
  • Honor the MVC architecture
  • Write tests

Deploying Laravel Projects to Kubernetes.

https://medium.com/swlh/deploying-laravel-projects-to-kubernetes-a29edc0b588e

🔈 ‎Laravel Lunch Break

https://www.laravellunchbreak.com/1

Marcel Pociot와 Dries Vints의 새로운 팟캐스트 등장.

🎥 Astrocasts: Event Sourcing with Laravel and EventSauce.

https://astrocasts.com/live-sessions/projects/event-sourcing-with-laravel-and-eventsauce/session-3

🎥 A series of videos on How to use TDD to build a REST API in Laravel

https://www.youtube.com/playlist?list=PLrIm-p2rpV0F-rl4NPjNslEmW-D83AHOr

🎥 Screencasts on creating laravel-shift/blueprint.

https://www.youtube.com/watch?v=2sPfQIC7cqk

Zend/Laminas

올 해 초, Zend Framework이 Laminas로 이름을 바꾼다는 소식이 있었습니다. 프로젝트 저장소에는 Laminas로 마이그레이션 할 수 있는 laminas/laminas-migration(현재까지는 테스트 목적으로만 가능)와 guide on how to test migration문서가 존재합니다.

🌀 Async PHP

seregazhuk/php-watcher

https://github.com/seregazhuk/php-watcher

특정 디렉토리에 파일이 변경되는 것을 보면서 오랫동안 실행되는 PHP 어플리케이션을 재시작 해줍니다.

Building RESTful API With ReactPHP

https://leanpub.com/building-restful-api-with-reactphp

video tutorial 시리즈에 기반한 새로운 책.

apisearch-io/symfony-react-server

https://github.com/apisearch-io/symfony-react-server

Symfony Async Server built on top of ReactPHP.

기타 읽을 만한 글

What is garbage collection in PHP

https://tideways.com/profiler/blog/what-is-garbage-collection-in-php-and-how-do-you-make-the-most-of-it

PHP에서의 garbage collection을 다룬 글입니다.

Derick Rethans와 함께 토론한 팟캐스트도 확인해보세요.

An example of creating a custom inspection in PhpStorm

https://medium.com/@claudsonm/mysql-reserved-words-checker-for-laravel-migrations-on-phpstorm-2d34b5fcde75

PhpStorm에서 custom inspection을 만드는 방법을 소개합니다. MySQL 예약어 검사기를 예로 들고 있습니다.

On using the @mixin tag in DоcBlock

https://freek.dev/1482-the-mixin-php-docblock

@mixin DocBlock으로 IDE에서 자동 완성을 지원하는 방법을 소개합니다. De facto 표준처럼 자리잡은 phpDocumentor에는 mixin tag를 지원하지 않으므로 IDE별로 다를 순 있지만 PhpStorm에선 완벽히 지원한다고 합니다.

The value of the void typehint in PHP

https://freek.dev/1481-the-value-of-the-void-typehint-in-php

void typehint의 가치. return type에 void를 명시적으로 지정하면서 의도를 명확히 하는 것을 좋아하는 것 같습니다.

Embracing simplicity in your code

https://pociot.dev/21-embracing-simplicity-in-your-code

코드에서 간결함을 유지하는 방법을 설명하고 있습니다. 이런 예제를 모아 video course를 준비하려고 한다는 군요.

어쩐지 Laracon에서 Colin DeCarlo가 발표한 동영상에서의 관점과 비슷하다는 느낌이 들었습니다.

Solving the N+1 problem in ORMs.

https://thecodingmachine.io/solving-n-plus-1-problem-in-orms

ORM에서 N+1 문제를 해결하는 방법입니다. 이 글로 여러 피드백을 받은 것 같고, 이 아이디어는 이미 많은 ORM 도구에서 도입하고 있었다고 update를 추가했네요.

PHP: Past and Future

https://blog.krakjoe.ninja/2019/10/php-past-and-future.html

PHP가 2008년 이후로 어떻게 변화했고, PHP 4와 PHP 8의 성능도 비교해줍니다.

Examples of using FFI from PHP 7.4

🎥 Videos

PHP Yorkshire 2019 videos

https://www.youtube.com/playlist?list=PLizA60F3A-6xi1CEmSMrR_d2vTZ4UspiO

재생 목록은 아래와 같습니다.

  • Asmir Mustafic - Building Modular Architectures
  • Clinton Ingrams - SOCcing: Responding to a Cyber Incident
  • Damien Seguy - Top 10 PHP Classic Traps
  • Daniel Shaw - Thinker, Tester, Lawyer, Spy
  • Katy Ereira - Testing Legacy Code & Safe Refactoring
  • Larry Garfield - Free Software: It’s not about the license
  • Lorna Mitchell - A Meritocracy of Pull Requests
  • Michael Heap - API Standards 2.0
  • Larry Garfield - Building a cloud-friendly application
  • Michelle Sanver - An introduction to Graph Databases in PHP, using Neo4j
  • Vitor Brandao - Build your own Neural Network, with PHP!

PHP Serbia 2019 videos

https://www.youtube.com/playlist?list=PLizA60F3A-6xi1CEmSMrR_d2vTZ4UspiO

재생 목록은 아래와 같습니다.

  • The Opening Ceremony PHP Serbia Conference 2019 | #phpsrb
  • PHP Serbia Conference 2019 | Official After-movie | #phpsrb
  • PHP Serbia Conference 2019 - Day 1 | #phpsrb
  • PHP Serbia 2019: Zeev Suraski - Keynote Talk | #phpsrb
  • Srdjan Vranac - Be nice, help the person who hacks your servers to get your data | #phpsrb
  • Herberto Graca - Making architecture explicit | #phpsrb
  • Rafael Dohms - Application Metrics (with Prometheus examples) | #phpsrb
  • Ondřej Mirtes - Testing Strategy with the Help of a Static Analyzer | #phpsrb
  • Ian Littman - Load Testing Your App | #phpsrb
  • Nuno Maduro - Writing Effective PHP | #phpsrb
  • Panel Discussion: Road to seniority | #phpsrb
  • Marcel Pociot - Getting started with WebSockets | #phpsrb
  • Ivan Jovanovic - Micro Frontends - A microservice approach to the modern web | #phpsrb
  • Pauline Vos - Git Legit | #phpsrb
  • Matt Brunt - Content Security Policies: Let’s Break Stuff | #phpsrb
  • Sebastian Feldmann - Hello my name is “if” | #phpsrb
  • Matthieu Napoli - Serverless PHP applications with Bref | #phpsrb
  • Juliette Reinders Folmer - The Big “Why equal doesn’t equal” Quiz | #phpsrb
  • Alexander Makarov - Yii, PHP and frameworks | #phpsrb
  • Sebastian Thoss - SmokeTests - The what, why and how | #phpsrb
  • Andreas Heigl - The First Contact | #phpsrb
  • Damien Seguy - Top 10 PHP coding traps | #phpsrb
  • Bastian Hofmann - Getting started with Kubernetes | #phpsrb
  • Rowdy Rabouw - Browser APIs: the unknown Super Heroes | #phpsrb
  • Gabor Nadai - 6 Things I Learned as a Lead Developer | #phpsrb
  • Antonio Peric Mazar - Symfony 4: A new way to develop applications | #phpsrb
  • PHP Serbia Conference 2019 Grand Opening Ceremony | #phpsrb
  • Dušan Dželebdžić – interview about PHP Serbia 2019 | #phpsrb
  • Andreas Heigl, software developer and speaker at PHP Serbia 2019 – interview | #phpsrb
  • Alexander Makarov about PHP Serbia 2019 - interview | #phpsrb
  • Marcel Pociot about PHP Serbia conferences – interview | #phpsrb
  • Zeev Suraski, co-architect of PHP and co-founder of Zend about PHP Serbia 2019 Conference | #phpsrb
  • Robert Bašić – interview about PHP Serbia 2019 | #phpsrb
  • Thomas Dutrion - You’re not a {framework} developer! | #phpsrb
  • [WORKSHOP] Marko Mitranic: Boosting your performance with Blackfire #phpsrb
  • [WORKSHOP] Bastian Hofmann: Deploying your first Micro-Service application to Kubernetes #phpsrb
  • [WORKSHOP] Thomas Dutrion: Symfony as a software engineer #phpsrb 2019

Beachcasts: Store sensitive data in environment variables using phpdotenv

https://www.youtube.com/watch?v=oTrJfgUF1SI

🔈 Podcasts

Taylor said

Taylor Otwell이 그의 트위터에서 지난 5 년 동안 아칸소의 작은 도시에 있는 동안 $ 10,000,000 상당의 소프트웨어를 판매했다고 합니다. 아래 링크의 Laravel Snippet 팟캐스트에서 어떻게 성공적인 제품을 만들 수 있는지 이야기 한다고 합니다.

The Undercover ElePHPant

https://undercover-elephpant.com/episodes/introducing-the-undercover-elephpant

Matthew SetterBenjamin Eberlei이 호스트로 있는, PHP 응용 프로그램의 확장 및 최적화에 관한 팟캐스트.

PHP Internals News #32

https://phpinternals.news/32

James Titcumb에게 듣는, 상업용 PHP extension 개발.

Interviews from php[world]: Cal Evans, Taylor Otwell, Samantha Quiñones, and Gary Hockin.

https://www.phparch.com/podcast/25-interviews-from-phpworld/

Voices of the ElePHPant