ha-ah

로그, 게으른 로그

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 8월의 번역/해석본입니다.

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


안녕하세요!

PHP Annotated 8월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡을 것입니다.

News

PHP 8.2 Beta 3 has been released

PHP 8.2 베타 3가 출시되었습니다.

최종 베타가 예정대로 출시되었습니다. 다음 릴리스는 PHP 8.2.0 RC 1이며 9월 1일에 릴리스될 예정입니다.

PHP 8.2에서 더 이상 사용되지 않는 동적 속성(property)을 처리하는 방법을 확인하십시오 .

PHP 8.2에 추가될 기능에 대한 자세한 목록은 PHP.Watch 또는 stitcher.io를 참조하십시오 .

또한 플래시 뉴스레터인 The Road to PHP 8.2를 확인하십시오 .

PHP 8.0.22 and PHP 8.1.9 have been released

PHP 8.0.22PHP 8.1.9가 릴리스되었습니다.

🪲현재 지원되는 브랜치에 대한 버그 수정 릴리스입니다.

PHP Foundation Update, July 2022

PHP 재단 업데이트, 2022년 7월

후원자를 위한 월간 업데이트를 확인하십시오.

Composer 2.4 is out

Composer 2.4가 출시 되었습니다.

종속성의 보안 상태를 추적(audit), bash 자동 완성 및 여러 작은 변경 사항이 추가됐습니다.

두 가지 새로운 명령에 대해 자세히 알아보세요: auditbump.

deployphp/deployer 7.0.0 is out

deployphp/deployer 7.0.0이 출시되었습니다.

Deployer는 널리 사용되는 프레임워크를 지원하는 PHP로 작성된 배포 도구입니다.

v.7의 가장 큰 변화 중 하나는 새로운 공급 레시피입니다. 프로비저닝 레시피는 PHP 애플리케이션을 실행하기 위한 모든 VPS를 자동으로 설치하고 구성할 수 있습니다. 웹 서버, SSL, PHP, Redis, 노드 등을 설치합니다.

Codeception/Codeception 5.0.0 is out

Codeception/Codeception 5.0.0이 출시되었습니다.

Attribute, PHP 8 지원, 샤딩 및 기타 기능이 추가되었습니다!

swoole/swoole-src 5.0.0 is out

swoole/swoole-src 5.0.0이 출시되었습니다.

동시성 확장의 새 버전은 향상된 타입 시스템, 모든 함수의 매개변수 및 반환 값에 대한 타입 추가, 최적화된 오류 처리 및 기타 개선 사항 및 추가 사항과 함께 제공됩니다.

PhpStorm 2022.2 released

PhpStorm 2022.2 출시

이 주요 업데이트는 Mockery 및 Rector 지원, 제네릭 및 열거형 지원 강화, 디버거 및 HTTP 클라이언트 개선 등을 제공합니다.

🎬 PhpStorm 2022.2의 새로운 기능에 대한 비디오 개요를 시청 하세요.

그리고 막 PhpStorm 2022.3 로드맵이 게시했습니다.

  • PHP 8.2
  • Code Vision for PHP
  • Quick-fix preview
  • ParaTest support

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다 . 이 시리즈의 다섯 번째 에피소드가 곧 출시될 예정이므로 간략하게만 언급하겠습니다.

RFC: Asymmetric Visibility #PHP 8.3

https://wiki.php.net/rfc/asymmetric-visibility

이전에 Nikita Popov는 C#과 같은 속성(property) 접근자 구현을 제안했습니다. 그 RFC는 토론 단계를 통과하지 못했습니다. 대신 읽기 전용 속성이 승인되었습니다.

이번에 Ilija Tovilo와 Larry Garfield는 속성이 읽기 및 쓰기 작업에 대해 별도의(“비대칭”) 가시성을 가질 수 있도록 Swift와 유사한 구문을 추가할 것을 제안합니다.

class Foo{
public private(set) string $bar,
}

Larry의 몇 가지 메모:

  • 읽기 전용 속성의 복제 가능성 문제를 해결합니다.
  • 읽기 전용 속성의 상속 문제을 수정합니다. 지금은 readonly는 private 범위에서만 설정할 수 있고 protected 범위에서는 설정할 수 없습니다.
  • 다른 속성으로부터 재생성된 속성에 유용할 것입니다. 예를 들어, $o->setFirstName() 혹은 $o->setLastName()이 호출될 때마다 내부적으로 업데이트되는 public private(set) $fullName. 이는 향후 로드맵에 있는 접근자 hook에 적용될 수 있습니다.

Tools

serversideup/docker-php

serversideup/docker-php – PHP용 프로덕션에 바로 사용 가능한 도커 이미지. Laravel, WordPress 등에 최적화되었습니다.

Crell/Serde

Crell/Serde – PHP 8용 강력한 Serde(직렬화/역직렬화) 라이브러리입니다. 자세한 내용은 Larry Garfield의 소개 게시물을 참조 하세요.

statix-php/server

statix-php/server – PHP의 내장 서버를 둘러싼 객체 지향 래퍼입니다.

aimeos/map

aimeos/map – PHP 배열 및 컬렉션이 쉬워졌습니다. 또 다른 Laravel과 유사한 컬렉션 패키지이지만 종속성이 없습니다.

hotmeteor/spectator

hotmeteor/spectator – PHP용 OpenAPI 테스트.

DaveLiddament/sarb

DaveLiddament/sarb – 이 도구는 PHP 정적 분석기에 대한 기준점(baseline) 기능을 제공합니다(기준점 이후에 발생한 문제만 리포트).
v1.5.0에서는 –clean-up옵션을 제공합니다. 여기에는 코드 품질을 점진적으로 개선하기 위해 수정해야 할 5가지 임의 문제가 나열되어 있습니다.

leafsphp/leaf

leafsphp/leaf – 웹 앱과 API를 빠르게 생성하기 위한 간단하지만 강력한 마이크로 프레임워크입니다.

pheature-flags/pheature-flags

pheature-flags/pheature-flags – 제어된 조건에서 특정 기능을 활성화 및 비활성화할 수 있는 릴리스 관리 시스템입니다.

gakowalski/alternative-interpreters

gakowalski/alternative-interpreters – 대체 PHP 인터프리터, 컴파일러 및 트랜스파일러 목록입니다.

Symfony

symfony/clock

symfony/clock은 시스템 시계(clock)에서 응용 프로그램을 분리하는 새로운 컴포넌트입니다.

그것의 릴리스는 프레임워크 제국주의(무료로 어떤 것을 취한 다음 자기 것이라고 우기는 현상)에 대해 Symfony를 비난하는 짧은 트윗 폭풍을 일으켰습니다.

Frank de Jonge(@frankdejonge)의 트윗

솔직히, @symfony 가 커뮤니티 패키지를 수용하는 대신 시계를 만드는 것은 나를 슬프게 만듭니다. 그들은 NIH 증후군으로 계속 고통 받고 있습니다. 말 그대로 3(?) 시계 패키지와 동일한 인터페이스입니다. Symfony는 아마도 그들의 인기가 떨어지게 할 것입니다.

참고 : NIH 증후군(Not invented here syndrome)은 말 그대로 ‘여기서 개발한 것이 아니다.’(Not invented here)라는 의미로, 제3자가 개발한 기술이나 연구 성과는 인정하지 않는 배타적 조직 문화 또는 그러한 태도를 말한다. - 위키백과

taylor otwell(@taylorotwell)의 트윗

Symfony가 왜 그렇게 하는지 전혀 읽지 않았지만 난 여기에 돈을 걸 것입니다. 1) 그건 사소합니다. 2) They don’t want to have to bug an outside rando with a day job and 1,000 other concerns to update PHP versions, fix bugs, etc. anytime something comes up.(역자 주: 해석 포기)

Nicolas Grekas(@nicolasgrekas)의 트윗

  • Nicolas는 Symfony OSS core contributor입니다.

Package Principles는 읽을 가치가 있을 것입니다. 예를 들어 Stable-Dependencies Principle이 새로운 #Symfony Clock 구성 요소에 대한 논의에 한 눈에 적용해볼 수 있습니다.

Package Principles에서 이야기 하는 Stable-Dependencies Principle

  • 디자인은 사용되는 환경의 특성에 따라 변화하고 있습니다. 따라서 패키지 디자인도 변화를 지원해야 합니다. SDP는 휘발성을 원하는 패키지가 변경하기 어려운 패키지에 의존해서는 안 된다고 명시하고 있습니다.

8 News in Config Transformer that Converts Symfony YML to PHP by Tomas Votruba.

Symfony YML을 PHP 로 변환하는 Config Transformer의 8가지 소식 by Tomas Votruba

Repository pattern the SOLID way in Symfony by Saeid Raei.

Symfony에서 SOLID하게 리포지토리 패턴 구현하는 법 by Saeid Raei.

How to apply Hexagonal/Clean/Onion architecture with only two changes to your symfony project by Saeid Raei.

symfony 프로젝트에 단 두 가지 변경 사항으로 Hexagonal/Clean/Onion 아키텍처를 적용하는 방법 by Saeid Raei.

Symfony Testing: using Repository pattern without connecting to database by Saeid Raei.

Symfony 테스트: 데이터베이스에 연결하지 않고 Repository 패턴을 사용 by Saeid Raei.

Voila! Symfony and PHP 8.1 by Mert Simsek.

짜잔! Symfony와 PHP 8.1 by Mert Simsek.

Decorating Commands by Michael Zangerle.

Decorating Commands by Michael Zangerle.

두 가지 목적에 따라 다르게 동작하길 바라는 Command를 데코레이터 패턴으로 변경.

Clean up your migrations! by Victor Bocharsky.

마이그레이션을 정리하십시오! by Victor Bocharsky.

Laravel

🎬 What’s New In Laravel 9.23.0, Laravel 9.24.0, Laravel 9.25.0

🎬 Laravel 9.23.0, Laravel 9.24.0, Laravel 9.25.0의 새로운 기능 - Christoph Rumpel이 Laravel 업데이트에 대한 간략한 개요를 제공하는 이 새로운 YouTube 시리즈를 확인하세요.

protonemedia/laravel-splade

protonemedia/laravel-spade – Blade의 단순성과 Inertia.js의 마법.

SPA를 쉽게 구축할 수 있게 도와줍니다.

Sairahcaz/laravel-xhprof

Sairahcaz/laravel-xhprof – Laravel 애플리케이션을 프로파일링하기 위한 간편한 XHProf 설정.

BinarCode/laravel-restify

BinarCode/laravel-restify – 강력한 JSON:API 호환 Rest API를 Laravel과 함께 만드는 가장 빠른 방법입니다.

Increase performance by using Eloquent’s setRelation method by Freek Van der Herten.

Eloquent의 setRelation 메소드를 사용하여 성능을 높이십시오 by Freek Van der Herten.

How I develop applications with Laravel by Steve (King) McDougall.

Laravel로 애플리케이션을 개발하는 방법 by Steve (King) McDougall.

Scaling Laravel to 100M+ jobs and 30,000 requests/sec by Mateus Guimarães.

Laravel을 1억 개 이상의 작업과 초당 30,000개의 요청으로 확장합니다 by Mateus Guimarães.

How to Safely and Efficiently Upgrade an Out-of-Date Laravel App by Jamison Valenta

오래된 Laravel 앱을 안전하고 효율적으로 업그레이드하는 방법 by Jamison Valenta

Challenges when lift-and-shifting Laravel apps into AWS Lambda by Marco Deleu.

Laravel 앱을 AWS Lambda로 리프트 앤 시프팅할 때의 문제 by Marco Deleu.

🎬 5-hour Laravel 9 tutorial for beginners.

🎬 초보자를 위한 5시간짜리 Laravel 9 튜토리얼.

기타

Serverless PHP Applications on Digital Ocean Functions by Ayesh Karunaratne.

Digital Ocean Functions에서의 서버리스 PHP 애플리케이션 by Ayesh Karunaratne.

Narrowing types for static analysis by Jordi Boggiano

Jordi Boggiano의 정적 분석 을 위한 타입 좁히기 – Composer를 비롯한 몇 가지 오래된 코드베이스를 PHPStan의 레벨 8로 이동하는 과정에서 Jordi가 배운 몇 가지 교훈.

The PHP Handbook – Learn PHP for Beginners by Flavio Copes.

PHP 핸드북 – Flavio Copes의 초심자를 위한 PHP 배우기.

The difference between Traits, Interfaces, and Abstract Classes in PHP by Andrew Schmelyun.

Andrew Schmelyun의 PHP에서 Trait, 인터페이스 및 추상 클래스의 차이점.

When to use a trait? by Matthias Noback.

Trait는 언제 사용합니까? by Matthias Noback.

Stop using “static” in PHP and Stop using “extends” in PHP by Mike Zukowsky.

Mike Zukowsky의 PHP에서 “static”을 사용하지 맙시다PHP에서 “extends”를 사용하지 맙시다.

The 100 PHP functions in 2022 by Damien Seguy.

Damien Seguy의 2022년 가장 많이 사용되는 PHP 함수 100개.

PHP native Attributes quick reference by Damien Seguy – How many core attributes can you name?

Damien Seguy의 PHP 기본(native) Attribute 빠르게 확인하기 – 여러분은 몇 가지나 이름을 댈 수 있습니까?

Simple Solutions 1 – Active Record versus Data Mapper by Matthias Noback.

간단한 솔루션 1 – Active Record vs Data Mapper by Matthias Noback.

3 years of lift-and-shift into AWS Lambda by Marco Aurélio Deleu

AWS Lambda로 리프트 앤 시프트한 3년 – AWS Lambda를 PHP 호스팅 공급자로 사용할 때 주의해야 할 주의 사항.

(위 Laravel 쪽에서 소개된 글과 동일합니다)

Do generators really reduce the memory usage?

generator가 실제로 메모리 사용량을 줄입니까?

What I would change about PHP by Brent Roose.

Brent Roose의 내가 PHP에서 바꾸고 싶은 것.

Audio/Video

🎬 Why you need to update PHP by Brent Roose.

Brent Roose의 PHP를 업데이트해야 하는 이유.

🎬 PHP 101 for Absolute Beginners – A full 2-hour course.

완전 초보자를 위한 PHP 101 – 전체 2시간 코스.

Conferences

대면 이벤트가 드디어 돌아왔습니다!

Community

A nomenclature of hate by Jordi Boggiano.

Jordi Boggiano의 증오 명명법.

오픈 소스 프로젝트를 유지하는 것은 어렵습니다. 문제를 해결해야 할 뿐만 아니라 좌절한 사용자를 다루어야 하기 때문입니다. Alexander Makarov가 수집한 몇 가지 예를 확인하십시오: samdark/opensource-hate.

swyx(@swyx)의 트윗

https://twitter.com/swyx/status/1552730861052628992

swyx의 트윗 이미지

asgrim/side-effect

asgrim/side-effect - 모든 걸 __toString() 메서드 안에서 처리하는 프레임워크.

James Titcumb(@asgrim)의 트윗

농담인 줄 알았겠지만, 진짜 만들었어

누군가 __toString() 이외의 다른 메서드에 구현되었다며 버그 리포팅해서, 이를 수정하기도 했습니다.

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 7월의 번역/해석본입니다.

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


안녕하세요!

PHP Annotated 7월호에 오신 것을 환영합니다. 여기에서 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡을 것입니다.

News

PHP 8.2.0 Alpha 2 and PHP 8.2.0 Alpha 3 have been released

세 번째이자 마지막 알파가 예정대로 출시되었습니다. 다음 릴리스는 7월 21일에 예정된 PHP 8.2.0 Beta 1입니다.

역자 주: 번역 시간 기준으로 21일이 지나 8.2.0 Beta 1은 출시되었습니다. 다음 릴리스는 8월 4일에 예정된 PHP 8.2.0 Beta 2입니다.

PHP 8.2에 추가될 기능에 대한 자세한 목록은 php.watch 또는 stitcher.io를 참조하십시오 .

PHP 8.0.21 and PHP 8.1.8 have been released

PHP Foundation Update, June 2022

PHP Foundation 업데이트, 2022년 6월

후원자를 위한 월간 업데이트를 확인하십시오.

  • 개발자가 달성한 것, 새로운 후원자 및 재단에 기여할 수 있는 재정적 방법 등

php.net redesign is being discussed

php.net 재설계가 논의 중입니다

개발 중인 php 웹사이트 캡쳐 화면

디자인 실험으로 현재 #php 웹사이트를 개편했습니다. 더 수정할 수 있는 부분이 많이 있지만 지금까지는 만족합니다. 어떻게 생각하세요?

Mike van Riel(@mvriel)의 트윗

한편 Andreas Möller 덕분에 php.net 소스 코드는 이제 friendsofphp/php-cs-fixer를 사용하여 코딩 표준 문제를 수정 합니다.

PHP의 메인 사이트 업데이트를 돕고 싶다면 기여 가이드(contributing guide)를 확인하세요 .

인기 있는 PHP 비동기 프레임워크 ReactPHP 10

10주년을 기념하기 위해 팀은 async 및 await 기능이 포함된 완전히 새로운 비동기 구성 요소인 reactphp/async를 출시했으며 이는 PHP 8.1+와 같은 fiber를 기반으로 구축되었습니다.

Cees-Jan Kiewiet의 My road to fibers with ReactPHP를 읽어보세요.

Is PHP dead?

PHP는 죽었습니까?

한 번 그리고 영원히 대답을 남겼습니다.

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다 . 이 시리즈의 다음 에피소드가 곧 출시될 예정이므로 업데이트에 대해 간단히 언급하겠습니다.

✅ RFC: Disjunctive Normal Form Types #PHP 8.2

RFC: Disjunctive Normal Form Types #PHP 8.2

Disjunctive Normal Form 유형에 대한 지원이 PHP 8.2에 승인되었습니다. 결합 및 교차 유형을 혼합할 수 있습니다.

class Foo {  
public function bar(): (A & B) | D;
}

Derick Rethan가 George Peter Banyard와 함께 하는 🔈 PHP Internals News 팟캐스트 에피소드 103에서 자세히 알아보십시오.

✅ RFC: Fetch properties of enums in const expressions #PHP 8.2

RFC: const 표현식에서 enum 속성 가져오기 #PHP 8.2

PHP 8.2에서는 -> / ?-> 를 사용하여 상수 표현식에서 enum 속성을 가져올 수 있습니다.

enum A: string {
case B = 'B';
const C = [self::B->value => self::B];
}

✅ RFC: Random Extension Improvement #PHP 8.2

RFC: 랜덤 확장 개선 #PHP 8.2

몇 가지 문제가 “Random Extension 5.x” RFC의 투표가 시작된 이후에만 제기 되었습니다(적절한 토론이 부족했기 때문에). 이러한 각 문제에 대해 투표 옵션을 만들고 추가 결정을 내리기로 했고 모두 통과했습니다.

✅ RFC: Make the iterator_*() family accept all iterables #PHP 8.2.

RFC: iterator_*() 패밀리가 모든 이터러블 #PHP 8.2를 허용하도록 합니다.

PHP 8.2에서 iterator_to_array()와 iterator_count()의 $iterator 파라미터는 \Traversable에서 iterable(예: \Traversable|array)로 확장됩니다.

function foo(iterable $foo) {
$foo = iterator_to_array($foo); //now accepts arrays

return array_map(strlen(...), $foo);
}

✅ RFC: Constants in Traits #PHP 8.2

RFC: Trait에서의 상수 #PHP 8.2

PHP 8.2에서는 현재 property에서 가능한 것과 동일한 방식으로 Trait에 상수를 정의할 수 있습니다.

trait Foo {
public const PHP_VERSION = '8.2';
}

class Base {
use Foo;
}

class Bar extends Base {
public function phpVersion(): void {
echo parent::PHP_VERSION; // 8.2
}
}

❌ RFC: New Curl URL API

RFC: 새로운 Curl URL API

❌ RFC: json_encode indentation

RFC: json_encode 들여쓰기

❌ RFC: Stricter implicit boolean coercions

RFC: 더 엄격한 암시적 bool 강제 변환

❌ RFC: Create a global login system for php.net

RFC: php.net용 글로벌 로그인 시스템 생성

❌ RFC: Short Closures 2.0

RFC: 짧은 Closures 2.0

Marcel Pociot(@marcelpociot)의 트윗

다음에 승인될 수 있도록 RFC를 개선해 봅시다.🤞

🤔 RFC: Auto-implement Stringable for string backed enums

RFC: 문자열 지원 열거형에 대한 Stringable 자동 구현

이 RFC는 문자열을 지원하는 열거형이 Stringable을 자동으로 구현하기를 제안하지만 여전히 메서드의 사용자 영역 구현은 허용하지 않습니다.

🤔 RFC: PDO driver specific sub-classes

RFC: PDO 드라이버별 하위 클래스

💡 RFC: Unify PHP’s typing modes (aka remove strict_type declare)

RFC: PHP의 타이핑 모드 통합(strict_type 선언 제거라고도 함)

타입 캐스팅 사용 및 개발자 부담에 미치는 영향에 대한 고려와 함께,
strict_type를 PHP(9+)에서 기본값으로 변경하는 draft 아이디어입니다.

PHP는 다른 언어와 비교하여 작동할 수 있는 두 가지 입력 모드가 있습니다. 하나는 너무 느슨하고 다른 하나는 너무 엄격합니다. 이 RFC는 이 두 모드의 존재 이유, 단점, 두 모드를 다시 통합하기 전에 변경해야 할 사항에 대해 설명합니다.

Tools

laravel/pint

laravel/pint – 미니멀리스트를 위한 PHP 코드 스타일 수정기(fixer). 기본적으로 FriendsOfPHP/PHP-CS-Fixer 래퍼지만 더 쉬운 구성과 멋진 출력을 제공합니다.

DaveLiddament/php-language-extensions

DaveLiddament/php-language-extensions - PHP 언어 확장을 정의하기 위한 속성(정적 분석에 의해 시행됨): #[Friend], #[Package]등.

currently in BETA.

RobiNN1/phpCacheAdmin

RobiNN1/phpCacheAdmin – Redis, Memcache(d) 및 OPCache용 웹 대시보드.

thecodingmachine/safe

thecodingmachine/safe – 에러가 발생하면 false를 반환하는 대신 예외를 발생시키도록 재작성된 PHP 함수 모음.

use function Safe\file_get_contents;
use function Safe\json_decode;

// This code is both safe and simple!
$content = file_get_contents('foobar.json');
$foobar = json_decode($content);

cerbero90/enum

cerbero90/enum – enum 기능을 강화하기 위한 종속성 없는 PHP 라이브러리.

PrinsFrank/standards

PrinsFrank/standards – ISO3166, ISO4217, ISO639 등 PHP Enum의 표준 모음입니다.

soatok/cupcake

soatok/cupcake – 간단하고 안전한 HTML form(생성 및 처리)을 위한 PHP 라이브러리입니다.

T-Regx/T-Regx

T-Regx/T-Regx – 현대 표준에 부합하는 PHP 정규식입니다. readme에서 preg_* 불일치에 대한 섹션을 확인하십시오.

어떤 인자는 preg_* 함수에 심각한(fatal) 에러를 발생시킵니다. T-Regx는 이를 예측하고, catch할 수 있도록 예외를 던집니다.

deComplex.me

deComplex.me – 두 코드 블록의 복잡성을 나란히 비교하는 웹 도구입니다.

PiotrPress/wordpress-hooks

PiotrPress/wordpress-hooks – attribute에 대한 좋은 사용 사례입니다! 라이브러리를 사용하면 WordPress Hooks(필터 및 작업)를 개체의 메서드에 자동으로 추가할 수 있습니다.

markrogoyski/itertools-php

markrogoyski/itertools-php – 루프를 강화하는 PHP 반복 도구.

Composer 2.4 will be released later this year

Composer 2.4는 올해 말에 출시될 예정이며 두 가지 새로운 명령을 제공합니다.

Symfony

Launched ux.symfony.com and released 4 New UX Components.

ux.symfony.com을 출시하고 4개의 새로운 UX 컴포넌트를 출시 했습니다 . 이 웹사이트는 각 UX 구성 요소를 만지고 샘플링하는 놀이터입니다.

Twig Smoke Rendering

Twig Smoke Rendering – Fortune Favors the Bold by Tomas Votruba.

Laravel

Vite is now the default frontend asset bundler in new Laravel projects

Vite는 이제 Breeze 및 Jetstream을 포함해 새로운 Laravel 프로젝트의 기본 프론트엔드 asset 번들러 입니다.

Taylor Otwell(@taylorotwell)의 트윗

새로운 Laravel 프로젝트가 Vite를 사용하여 프론트엔드 자산을 번들로 제공한다는 소식을 전하게 되어 기쁩니다. Breeze와 Jetstream도 업데이트되었습니다. 🔥
Inertia Vue 또는 React와 함께 새로운 Breeze/Vite 스택을 사용할 때 번개처럼 빠른 핫 모듈 교체를 경험하십시오. ⚡

Christoph Rumpel 의 Moving A Laravel Webpack Project To Vite 튜토리얼을 확인하십시오.

hammerstonedev/sidecar

hammerstonedev/sidecar – 이 패키지를 사용하면 Laravel 애플리케이션에서 AWS Lambda 기능을 배포하고 실행할 수 있습니다. 사용 사례의 예는 Browsershot을 통해 스크린샷을 만드는 것 입니다.

calebporzio/parental

calebporzio/parental – STI(Single Table Inheritance, 단일 테이블 상속) 기능을 Eloquent에 제공합니다.

STI : 모델을 확장하지만(일반적으로 특정 동작을 추가하기 위해) 동일한 테이블을 참조하는 것.

spatie/laravel-onboard

spatie/laravel-onboard – 앱에 대한 단계별 사용자 온보딩을 생성하기 위한 패키지입니다.

zgabievi/laravel-promocodes

zgabievi/laravel-promocodes – 강력한 쿠폰 및 프로모션 코드 생성기.

abrouter/laravel-abtest

abrouter/laravel-abtest – Laravel로 A/B 테스트를 실행하는 간단한 패키지입니다.

Running PHPStan on max with Laravel by Steve McDougall.

https://laravel-news.com/running-phpstan-on-max-with-laravel

PHPStan을 최대한으로 실행하기.

Add comments to SQL queries made by Laravel by Freek Van der Herten.

https://freek.dev/2279-add-comments-to-sql-queries-made-by-laravel

쿼리의 출처를 쉽게 찾아낼 수 있도록 Laravel이 만든 쿼리에 주석을 추가합니다.

Containerizing Laravel Applications by Matt Casperson.

https://www.honeybadger.io/blog/containerizing-laravel-applications/

기존 Laravel 애플리케이션을 컨테이너화하는 과정.

기타

The very useful variadic argument by Damien Seguy.

https://www.exakat.io/en/the-very-useful-variadic-argument/

정적 변수는 함수 호출이 끝날 때 죽지 않고 다음 호출까지 살아 있습니다.

class A {
public static function counter() {
static $i = 0;
return ++$i;
}
}
class B extends A {}

var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(1)
var_dump(B::counter()); // int(2)

PHP 8.0까지는 호출되는 클래스에 따라 고유한 정적 변수가 존재했습니다만, 8.1부터 바뀌었습니다.
이 글에서는 정적 변수의 문제와 이를 제거하는 방법을 설명합니다.

5 ways to give a name to your booleans by Damien Seguy.

bool에 이름을 지정하는 5가지 방법 - Damien Seguy

  • 상수로 만들고
  • enum으로 전환하고
    enum Comparison {
    case STRICT;
    case LOOSE;
    }

    function foo(bool $comparison) {}
    function goo(Comparison $comparison) {}

    foo(true);
    goo(Comparison::STRICT);
  • named parameter를 사용하고
    $v = in_array($needle, $haystack, strict: true); 
  • dummy 할당(assignation)을 사용하고
    $v = in_array($needle, $haystack, $strict = true); 
  • comment를 활용
    $v = in_array($needle, $haystack, /\* strict \*/ true);

Top 100 PHP classes that you should know by Damien Seguy.

당신이 알아야 할 100대 PHP 클래스 - Damien Seguy.

PHP version stats: July, 2022 by Brent Roose.

PHP 버전 통계 : 2022년 7월 by Brent Roose.

5 Pitfalls of Upgrade to Native PHP Enums and How to Avoid Them by Tomas Votruba.

네이티브 PHP 열거형으로 업그레이드할 때의 5가지 함정과 이를 피하는 방법 by Tomas Votruba

On the use of enums by Larry Garfield – When should you use PHP enums, and when shouldn’t you?

Larry Garfield의 enum 사용에 대해 – PHP enum을 언제 사용해야 하고 언제 사용하지 않아야 합니까?

Effective immutability with PHPStan by Matthias Noback – DateTimeImmutable is actually mutable.

Matthias Noback의 PHPStan을 사용한 효과적인 불변성 DateTimeImmutable은 실제로 변경 가능합니다.

$dt = new DateTimeImmutable('now');
echo $dt->getTimestamp() . "\n";

$dt->__construct('tomorrow');
echo $dt->getTimestamp() . "\n";

위와 같이 실제로 변경 가능하기 때문에, 진짜로 변경 가능하지 않도록 하려면 더 많은 노력이 듭니다.
그런데 대체 누가 __construct() 호출하나요?
그냥 마음 편하게 빌드 과정에서 PHPStan으로 잘 감시합시다…라고 하는 글입니다.

Benchmarking serialization by Larry Garfield.

Larry Garfield의 직렬화 벤치마킹.

Decoupling your security user from your user model by Matthias Noback.

Matthias Noback의 사용자 모델에서 보안 사용자 분리

Complete guide for PHP & Neo4j and using graph databases by Michal Štefaňák.

Michal Štefaňák의 PHP 및 Neo4j에 대한 완벽 가이드.

How to automatically add return type declarations with Rector and without breaking your code.

코드를 손상시키지 않고 Rector를 사용하여 반환 유형 선언을 자동으로 추가하는 방법.

PHP-FPM tuning: Using ‘pm static’ for max performance by Hayden James.

Hayden James의 PHP-FPM 튜닝: 최대 성능을 위해 ‘pm static’ 사용.

How can I trust my test suite? by Antonello D’Ippolito.

안토넬로 디폴리토의 내 테스트 스위트를 어떻게 신뢰할 수 있습니까?.

오디오/비디오

Community

  • Philip Sharp가 편집한 ElePHPants에 대한 현장 가이드. 57종의 코끼리가 있다는 사실, 알고 계셨나요?

  • PUFA – wordle과 비슷하지만 PHP 기능과 키워드를 추측하기 위한 것입니다.
    PUFA 화면

  • Frédéric Bouchery(@FredBouchery)의 트윗

    I just came back from the future, this is what I read on a tombstone
    #PHP #PhpNotDead

I DIDNT THINK I WOULD DIE BEFORE PHP 비석


오늘은 여기까지입니다. 읽어주셔서 감사합니다!

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 6월의 번역/해석본입니다.

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


안녕하세요!

PHP Annotated 6월호에 오신 것을 환영합니다. 여기에서는 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라갈 것입니다.

PHP Annotated 6월호를 편집하는 데 도움을 준 Sergey Panteleev에게 감사드립니다.

News

php.net received a new homepage design!

php.net이 새로운 홈페이지 디자인을 받았습니다!

새로운 모습을 보여주신 Lucas Azevedo와 팀에 감사드립니다.

❗PHP 7.4.30, PHP 8.0.20, and PHP 8.1.7 have been released

PHP 7.4.30 , PHP 8.0.20 , PHP 8.1.7 이 릴리스되었습니다

이것은 지원되는 브랜치에 대한 보안 업데이트입니다. 모든 사용자는 최신 버전으로 업그레이드하는 것이 좋습니다.

PHP 8.2.0 Alpha 1 has been released

PHP 8.2.0 Alpha 1이 릴리스되었습니다

PHP 8.2 릴리스 프로세스를 시작하는 첫 번째 알파가 출시되었습니다. 업데이트는 정해진 일정에 따라 2주마다 릴리스되며 최종 릴리스는 11월 24일 경으로 예상됩니다.
기능 동결(feature freeze)은 7월 19일에 예상되며, 이는 일부 변경 사항이 여전히 릴리스에 포함될 수 있음을 의미합니다. 현재 가장 눈에 띄는 변화는 다음과 같습니다.

전체 변경 사항 목록은 php.watch/versions/8.2를 참조하십시오.

Mac을 사용하는 경우 shivammathur/homebrew-php 덕분에 Nightly 채널을 통해 homebrew로 PHP 8.2를 사용해 볼 수 있습니다 .

그렇지 않으면 Docker 이미지가 번거로움 없이 시도해 볼 수 있는 가장 좋은 옵션일 것입니다.

PER Coding Style has been tagged 1.0.0

PER 코딩 스타일에 1.0.0 태그가 지정되었습니다.

PHP-FIG(@phpfig)의 트윗

PER 코딩 스타일 1.0.0은 PSR-12와 동일합니다. 이 권장 사항은 이제 PHP 언어로 제공되는 모든 새로운 기능을 따라잡기 위해 훨씬 더 빠르게 발전할 것입니다.

작업 그룹 모두를 축하합니다!

PhpStorm 2022.2 Early Access Program Is Open

PhpStorm 2022.2 Early Access Program 공개

Rector의 Built-in 지원, PHP의 제네릭에 대한 많은 개선 사항 등이 있습니다.

Developer Ecosystem Survey 2022

개발자 생태계 설문조사 2022

연례 생태계 설문조사에 참여하여 MacBook Pro, Xbox Series X, PlayStation 5 또는 기타 상품을 받을 수 있는 기회를 잡으십시오.

PHP Core

Core 뉴스의 대부분은 PHP Foundation 의 PHP Core Roundup 시리즈에서 자세히 다룹니다. 이 시리즈의 세 번째 에피소드가 곧 출시될 예정이므로 간략하게만 언급하겠습니다.

✅ RFC: Add true type #PHP 8.2

RFC: 트루 타입 추가 #PHP 8.2

유사 유형이었던 nullfalse에 추가하여 PHP는 이제 true 독립형 유형을 갖게 되며 이는 false에 대응합니다.
자세한 내용 은 이 변경 사항의 작성자인 George P. Banyard와 함께 하는 Derik Rethans의 PHP Internals News 팟캐스트를 들어보십시오.

✅ RFC: Undefined Property Error Promotion #PHP 9.0

RFC: 정의되지 않은 속성 접근 시 오류 발생 #PHP 9.0

기존 E_WARNING이 Error로 승격됩니다.
Magic 메서드로 handler를 통해 지원되는 getter 메서드는 유지됩니다.

✅ RFC: Expand deprecation notice scope for partially supported callables #PHP 8.2

RFC: 부분적으로 지원되는 callable에 대한 지원 중단 알림(deprecation notice) 범위 확장 #PHP 8.2

📊 RFC: Stricter implicit boolean coercion #PHP 8.2

RFC: 더 엄격한 암시적 부울 강제 변환 #PHP 8.2

📊 RFC: Create a global login system for php.net

RFC: php.net용 글로벌 로그인 시스템 생성

RFC는 *.php.net 사이트용 SSO 생성을 제안합니다. 다만 시행 계획이 불투명해 1차 시도를 넘지 못할 가능성이 큽니다.

📊 RFC: Random Extension 5.x #PHP 8.2

RFC: Random Extension 5.x #PHP 8.2

이 RFC와 이전의 시도 이후의 지속적인 노력에 감사드립니다.

🤔 RFC: Fetch properties in const expressions #PHP 8.2

RFC: const 표현식에서 속성 가져오기 #PHP 8.2

enum A: string {    
case B = 'B';
// This is currently not permitted
const C = [self::B->value => self::B];
}

이것이 매우 유용할 수 있는 예가 있습니다. 예를 들어 Symfony and #[Target]을 확인 하십시오.

🤔 [RFC] Short Closures 2.0

[RFC] Short Closures 2.0

원래 Nuno Maduro와 Larry Garfield가 제안했으며 현재 Arnaud Le Blanc가 채택한 이 RFC는 여러 명령문을 허용하여 화살표 함수를 확장하는 제안을 올렸습니다.

fn () {    
$tmp = $a + $b;
return $tmp;
}

Interview with the PHP Foundation Core Developers supplemented with answers from Arnaud Le Blanc.

Arnaud Le Blanc의 답변으로 보충 된 PHP Foundation 핵심 개발자와의 인터뷰.

Tools

Indigo (beta)

Indigo (베타) — 이 도구는 Mac에서 로컬 개발 환경을 구성하고 실행하는 방식을 혁신하는 것을 목표로 합니다.

Easy-ECC 1.0.0

Paragon Initiative Enterprises 팀 은 PHP에서 elliptic curve 암호화 작업을 더 쉽게 해주는 도구인 Easy-ECC 1.0.0과 JWT에 대한 보다 안전한 대안인 PASETO를 출시했습니다.

minicli/minicli

minicli/minicli – CLI 중심 PHP 애플리케이션을 구축하기 위한 최소한의 종속성 없는 프레임워크입니다.

crwlr/query-string

crwlr/query-string – URL용 스위스 군용 칼입니다. HTTP 요청에 대한 쿼리 문자열을 매우 편리하게 생성, 액세스 및 조작할 수 있습니다. 자세한 내용은 기사 를 참조하십시오.

voku/simple_html_dom

voku/simple_html_dom – 현대적이고 단순한 PHP용 HTML DOM 파서.

PHP-CS-Fixer Configurator

PHP-CS-Fixer Configurator – 모든 PHP CS Fixer 옵션과 설명 이 있는 멋진 웹사이트입니다 .

IvanGrigorov/VMValidator

IvanGrigorov/VMValidator – PHP 모델을 검증(validate)하기 위한 attribute 세트입니다.

thecodingmachine/graphqlite

thecodingmachine/graphqlite – 이 도구를 사용하면 PHP 속성/주석을 사용하여 GraphQL API를 선언할 수 있습니다.

exakat/php-static-analysis-tools

exakat/php-static-analysis-tools – 유용한 PHP 정적 분석 도구의 검토 목록입니다. Psalm/PHPStan 뿐만이 아닙니다. PhpStorm의 모든 스마트한 검사기를 CI 파이프라인으로 가져오는 JetBrains의 도구인 Qodana PHP도 있습니다 .

nmcteam/3dash

nmcteam/3dash – PHP용 가벼우 정적 사이트 생성기. SculpinJigsaw도 멋지지만 이 작은 도구는 정말 깔끔하고 API가 매우 간단합니다. 빠르게 예시를 보려면 공식 웹사이트를 확인하세요: 3dash.dev.

PhpStorm

DDEV Integration – IntelliJ IDEs Plugin

DDEV 통합 – IntelliJ IDE 플러그인 – PhpStorm용 DDEV 통합 플러그인 의 베타 버전입니다.

Boost your productivity in Laravel with advanced PhpStorm setup by Dmitry Khorev

https://medium.com/@dkhorev/boost-your-productivity-in-laravel-with-advanced-phpstorm-setup-34a354efbbce

고급 PhpStorm 설정으로 Laravel에서 생산성을 높여보세요.

PhpStorm이 생산성을 위한 완벽한 IDE인 이유

  • Huge list of static code inspections
  • Code auto-format and optimizing imports
  • Best IDE’s navigation tool (“Search Everywhere”)
  • Configurable common file and method templates
  • Laravel model/query integration use cases
  • Git integration

Clean and minimalistic PhpStorm by Brent Roose

Brent Roose의 깨끗하고 최소한의 PhpStorm.

  • Hide all toolbars
  • Light colour schemes
  • Increased font size
  • Code folding
  • Tabs at the bottom
  • Undocked sidebar
  • The navigation bar
  • Distraction free mode
  • Scopes and file colours

Symfony

Symfony 6.1

Symfony 6.1이 출시되었으며 많은 새로운 기능이 포함되어 있습니다 .

Ruud Kamphuis(@Ruud_)의 트윗

Symfony 6.1은 3시간 전에 출시되었습니다. 방금 업그레이드 PR을 병합하고 프로덕션에 제공했습니다 🚀. 모든 것이 원활하게 실행됩니다.
애플리케이션은 ±10년이 넘었고 10k+ 클래스가 있으며 현재 20k rpm을 처리하고 있습니다.
모두 행복한 금요일 보내세요 😎
https://jobs.ticketswap.com

Get certified on Symfony 6 and Twig 3

Symfony 6 및 Twig 3 인증 받기

이제 Symfony 6 및 Twig 3 온라인 자격증(certifications) 시험을 칠 수 있습니다. 두 시험 모두 처음부터 재작업되었습니다.

A Week of Symfony #806 (6-12 June 2022).

A Week of Symfony #806 (6-12 June 2022)

Initializing your Symfony project with solid foundations by Loïc Vernet.

견고한 기반으로 Symfony 프로젝트를 초기화 하기

How to test Symfony routes to make huge refactoring safe by Tomas Votruba.

거대한 리팩토링을 안전하게 만들기 위해 Symfony Route를 테스트하는 방법

Laravel

spatie/laravel-comments-livewire

spatie/laravel-comments-livewire – Spatie의 새로운 유료 Livewire 패키지로 Laravel 애플리케이션의 모델과 주석을 연결합니다.

laravel/vite-plugi

laravel/vite-plugiVite는 빠른 개발 환경을 제공하고 프로덕션용 코드를 번들로 제공하는 최신 프론트엔드 빌드 도구입니다. Laravel은 이제 개발 및 프로덕션용 asset을 로드하기 위한 공식 플러그인 및 Blade 지시문을 제공하여 Vite와 원활하게 통합됩니다.

hasinhayder/hydra

hasinhayder/hydra – 뛰어난 사용자 및 역할 관리 API와 함께 제공되는 Laravel 9x + Laravel Sanctum이 포함된 zero-config API boilerplate입니다.

Laravel Artisan Cheatsheet

Laravel Artisan Cheatsheet – Laravel의 내장 Artisan 명령 및 해당 옵션에 대한 온라인 레퍼런스입니다.

codestudiohq/laravel-totem

codestudiohq/laravel-totem – 이 도구를 사용하면 잘 구성된 대시보드에서 Laravel 일정을 관리할 수 있습니다.

worksome/request-factories

worksome/request-factories – 그 모든 boilerplate 없이도 Laravel에서 요청을 테스트합니다.

35 Laravel Eloquent Recipes by Martin Joo

35 Laravel Eloquent Recipes

Laravel Route Grouping: 6 Techniques to Organize Routes by Povilas Korop

Laravel Route 그룹화: Route 구성을 위한 6가지 기술

How To Implement Laravel Dynamic Scheduling by Ian Kumu

Laravel Dynamic Scheduling 구현 방법

Restructuring a Laravel Controller using Services, Events, Jobs, Actions, and more by Povilas Korop.

Services, Events, Jobs, Actions 등을 사용하여 Laravel 컨트롤러를 재구성합니다.

기타

My PHP enum style guide by Brent Roose.

Brent Roose의 PHP 열거형(enum) 스타일 가이드.

List-o-mania by Mark Baker. An article on PHP’s list construct with some clever tricks and a few of its limitations.

Mark Baker의 List-o-mania. list 몇 가지 영리한 트릭과 몇 가지 제한 사항이 포함된 PHP의 list 구성에 대한 기사입니다 .

The very useful variadic argument by Damien Seguy.

Damien Seguy의 매우 유용한 가변 인수.

Reviewing Property Declaration In PHP by Damien Seguy.

Damien Seguy의 PHP에서 속성 선언 검토.

Community

2022 PHP Conferences List

https://getparthenon.com/blog/2022-php-conferences-list/

Check out these funny t-shirts by Rafael Dohms:

Rafael Doohms재미있는 티셔츠를 확인 하세요 .

재미있는 티셔츠 이미지

Where can you get an elephpant?

코끼리는 어디서 구하나요?

워드프레스에도 사랑스러운 마스코트가 있다는 것을 알고 계셨나요?

WordPress(@WordPress)의 트윗

#Wapuu는 WordCamp Europe의 모든 곳에서 진행됩니다! 당신은 그에 대해 얼마나 많은 다른 사진을 얻을 수 있습니까? 우리가 모두 볼 수 있도록 http://wordpress.org/photos에 게시 하십시오!

📸 아래 사진은 #WordPress 사진 디렉토리 bit.ly/3PMYBe7에서 Nicholas Garofalo의 “Wapuu ready to travel to #WCEU

Yellow Wapuu 이미지

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 5월의 번역/해석본입니다.

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


안녕하세요!

PHP Annotated 5월호에 오신 것을 환영합니다. 여기에서는 선별된 뉴스, 기사, 도구 및 비디오를 포함하여 지난 한 달 동안 PHP 세계에서 일어난 가장 흥미로운 일을 따라잡았습니다.

PHP Annotated 5월호를 편집하는 데 도움을 준 Sergey Panteleev에게 감사드립니다.

News

PHP 8.1.6 and PHP 8.0.19 released

https://www.php.net/ChangeLog-8.php#8.1.6
https://www.php.net/ChangeLog-8.php#8.0.19

활성(active) branch에 비보안 버그 수정 업데이트입니다.

Release managers for PHP 8.2 have been selected!

https://wiki.php.net/todo/php82

PHP 8.2의 릴리스 관리자가 선정되었습니다!

바로 Pierrick CharronSergey Panteleev입니다. PHP 8.1 RM인 Ben Remsey가 새로운 신입 RM을 도울 것입니다.

PHP.Watch 및 Brent의 What’s new in PHP 8.2 게시물에서 PHP 8.2가 어떻게 형성되고 있는지 확인할 수 있습니다. 첫 번째 예비 PHP 8.2 벤치마크는 PHP 8.1에 비해 2.5% 성능 향상을 보여줍니다.

https://www.bleepingcomputer.com/news/security/popular-python-and-php-libraries-hijacked-to-steal-aws-keys/

PHPass 패키지가 어떻게 해킹되었는지 알아보세요. (위 기사와는 조금 다른 내용입니다.)

  • Rust/Python/PHP/Node의 유명 패키지 레지스트리에서 소유자의 이메일이나 연결된 github 계정이 유효하지 않는 패키지를 탈취할 수 있음을 보여주고,
    이메일 계정을 탈취하기 위해 도메인을 구입하거나 폐기된 GitHub 리포지토리를 다시 살렸다고 합니다(사실 폐기된 리포지토리명으로 생성은 안 되는데 아무렇게 만든 뒤 변경하는 방식으로는 가능했습니다). 이렇게 탈취한 뒤 악성코드를 심어 새로운 버전을 올리거나 최신 버전을 수정(이것도 문제)한 뒤 사용자들이 가져가게 합니다.

https://www.php-fig.org/psr/psr-7/meta/#7-errata

PHP-FIG는 PSR-7에 대한 보안 관련 정오표를 게시했습니다. MessageInterface 구현 시 몇몇 문자를 거부하는 등 헤더를 검증해야 합니다.

WordPress 6.0

https://wordpress.org/news/2022/05/arturo/

많은 유용한 기능과 UI 개선이 포함됐습니다.

Moodle 4

https://moodle.com/news/moodle-4-is-here/

인기 있는 오픈 소스 e-러닝 플랫폼의 주요 업데이트입니다.

Developer Ecosystem Survey 2022

https://surveys.jetbrains.com/s3/t-developer-ecosystem-survey-2022

2022년 개발자 에코시스템에 관한 설문조사에 참여하여 MacBook Pro, Xbox Series X, PlayStation 5 또는 기타 상품을 받을 수 있는 기회를 잡으십시오.

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Core Roundup 시리즈에서 자세히 다룹니다. 시리즈의 두 번째 에피소드가 곧 출시될 예정이므로 간략하게만 언급하겠습니다.

🤔 [RFC] Stricter implicit boolean coercions

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

논의 중.

암시적인 bool 값 변환을 좀 더 엄격하게 제한하고자 합니다.

🤔 [RFC] Expand deprecation notice scope for partially supported callables

https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices

논의 중.

이미 8.2에 accept된 [PHP RFC: Deprecate partially supported callables]의 범위를 확장하고자 하는 추가 RFC입니다. 이 RFC에 대한 자세한 내용은 Julliette와 함께하는 PHP Internals News 팟캐스트를 들어보십시오.

✅ [RFC] Undefined Property Error Promotion

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

PHP 9.0에 Accept 됐습니다.

정의되지 않은 속성에 엑세스하면 이전엔 E_NOTICE, PHP 8.0부터는 E_WARNING, PHP 9.0부터는 error를 throw합니다.

✅ [RFC] MySQLi Execute Query

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

PHP 8.2에 Accept 됐습니다.

매개변수화된 쿼리와 함께 mysqli를 더 쉽게 사용할 수 있습니다.

✅ [RFC] Readonly classes

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

PHP 8.2에 Accept 됐습니다.

Giuseppe Mazzapica(@gmazzap)의 트윗

With https://wiki.php.net/rfc/readonly_classes accepted, having read-only & type-safe simple data structures is going to be very easy in PHP 8.2
readonly class sample code

The PHP Foundation: Interview with Core Developers

https://thephp.foundation/blog/2022/05/06/interview-with-core-developers/

PHP 재단의 핵심 개발자와의 인터뷰 – Sebastian Bergman이 George, Derick, Ilija, Jakub 및 Máté를 인터뷰합니다. 곧 Arnaud의 답변도 알려 드리겠습니다.

opcache 최적화 프로그램

https://www.npopov.com/2022/05/22/The-opcache-optimizer.html

Nikita Popov는 PHP 핵심 엔진에 대한 심층 분석 시리즈를 계속합니다.

Tools

azjezz/psl 2.0

https://github.com/azjezz/psl

PHP 표준 라이브러리 – 현대적이고 일관되고 중앙 집중식이며 type을 충분히 사용하는 PHP용 non-blocking API 세트입니다. 이 주요 업데이트에는 비동기, TCP, UDP, 파일, IO 등과 같은 많은 개선 사항과 새로운 구성 요소가 포함되어 있습니다.

clue/framework-x

https://github.com/clue/framework-x

반응형 웹 애플리케이션을 구축하기 위한 간단하고 빠른 마이크로 프레임워크입니다. ReactPHP 비동기 스택 위에서 실행됩니다.

Christian Lück(@another_clue)의 트윗

@ReactPHP is going to be even more awesome! 🚀
Currently boosting performance from 32000 to 39000 requests/s.
This makes 18 billion requests per month on top 😎 On my laptop! On a single CPU core! 🔥
PHP scales! 💯

MedUnes/php-spx-installer

https://github.com/MedUnes/php-spx-installer

PHP SPX(A simple profiler for PHP)용 설치 프로그램입니다.

bmitch/churn-php

https://github.com/bmitch/churn-php

리팩토링이 필요한 파일을 검색합니다. 경로에 있는 각 PHP 파일을 검사하고 순환적 복잡성과 변경 기록을 기반으로 점수를 부여합니다.

PhpStorm에서는 여러 메트릭을 기반으로 리팩토링 후보를 찾는 built-in Refactoring Opportunities 검사를 활성화할 수 있습니다. 여기에서 자세히 알아보십시오.

Refactoring Opportunities 검사 옵션

역자 주 :
PhpStorm 2021.2부터 들어왔지만, IntelliJ에 PHP plugin을 사용하고 계신 분이면 이 옵션이 안 보일 수 있습니다. 이때는 PHP Architecture plugin을 추가로 설치하시면 됩니다.
아래 플러그인으로도 비슷한 효과를 보실 수 있습니다.

Monolog 3.0

https://github.com/Seldaek/monolog/releases/tag/3.0.0

대부분 cleanup 릴리스입니다. 더 강력한 type을 제공하고 이제 최소 PHP 8.1이 필요합니다.

Tinkerwell 3

https://tinkerwell.app/

The paid PHP code runner received a major update. Learn more.
유료 PHP 코드 러너가 메이저 업데이트 됐습니다. 자세히 알아보기.

Blackfire.io

https://blackfire.io/

PHP 코드에서 병목 현상을 찾기 위한 이 다목적 도구는 이제 오픈 소스 프로젝트에서 무료입니다 .

TomasVotruba/awesome-php-ast

https://github.com/TomasVotruba/awesome-php-ast

A curated list of tools, articles, and books about abstract syntax trees in the PHP world.
PHP 세계의 추상 구문 트리에 대한 도구, 기사 및 책의 선별된 목록입니다.

friendsoftwig/twigcs

https://github.com/friendsoftwig/twigcs

Twig 템플릿의 스타일 체커.

PHPStan 1.7.0

https://phpstan.org/

완전히 static한 리플렉션을 추가하고 @phpstan-consistent-constructor를 구현하고 new static() 문제를 해결하는 또 다른 방법으로 새로운 규칙을 추가한 버전입니다.

역자 주:
현재 블로그에는 1.7에 관한 내용이 없는데, GitHub release 페이지에서 내용을 확인하실 수 있습니다.

Latte 3.0.0

https://blog.nette.org/en/latte-3-an-impressive-leap#

완전히 재작성된 인기있는 템플릿 엔진의 업데이트.

dingo-d/wp-pest-integration-test-setup

https://github.com/dingo-d/wp-pest-integration-test-setup

Pest로된 WordPress 통합 테스트 스위트를 추가하는 패키지입니다. 사용 방법에 대한 자세한 내용은 이 블로그 게시물을 읽어 보세요.

CuyZ/Valinor

https://github.com/CuyZ/Valinor

모든 입력을 강력한 형식의 값 개체 구조로 매핑하는 데 도움이 되는 PHP 라이브러리입니다.

Symfony

what’s coming in Symfony 6.1

https://symfony.com/blog/category/living-on-the-edge/6.1

Symfony 6.1에서 제공 되는 기능을 확인하세요.
attribute를 통한 서비스 자동 연결(autowiring)개선된 라우팅 기능이 커뮤니티에서 가장 인기가 많은 것 같습니다. 지금까지 여러분께 가장 좋았던 것은 무엇인가요?

Experimental: Unpacking message properties as handler arguments in Symfony Messenger

https://angelovdejan.me/2022/05/10/experimental-unpacking-message-properties-as-method-arguments.html

Dejan Angelov의 Symfony Messenger에서 메시지 속성(property)을 핸들러 인수(argument)로 자동으로 전달하는 실험.

역자 주:
PHP attributes를 활용한 포스트 Using custom PHP attributes for registering and configuring Symfony Messenger handlers에서 이어지는 글입니다.

Why do we need Symfony Polyfill (… and why we shouldn’t)

https://thecodest.co/blog/why-do-we-need-symfony-polyfill-and-why-we-shouldnt

Sebastian Luczak의 Symfony Polyfill이 필요한 이유(… 그리고 필요하지 않은 이유).

nbgrp/singlea

https://github.com/nbgrp/singlea

SingleAuth 인증 프레임워크를 기반으로 하는 진정한 SSO 서비스를 제공하는 Symfony 번들 세트입니다.

Laravel

Does Laravel Scale? by Jack Ellis.

https://usefathom.com/blog/does-laravel-scale

“라라벨은 확장할 수 있습니까?” by Jack Ellis.

글쓴이가 운영하는 Fathom Analytics팀은 월 1,570억 개 이상의 요청을 처리할 수 있는 인프라에서 Laravel을 실행합니다.

역자 주:
Laravel이 대규모로 애플리케이션을 처리할 수 없을 거라는 부정적인 시각에 반박합니다.

  • 대부분이 Wikipedia나 Facebook 만큼의 트래픽을 처리할 생각은 아닐 것
  • 라라벨의 벤치마크 점수는 낮지만, 벤치마크는 큰 의미가 없다.
  • 주요 병목 현상의 원인이 되는 데이터베이스, 캐시 등의 외부 서비스 연동에서 발생하는 문제를 해결해야 하고, CDN, Queue system이나 Laravel Octane 같은 도구를 사용할 수도 있다. 커뮤니티 지원도 중요하다.
  • 대규모 서비스를 위한 코드 작성이나 대규모로 배포를 위한 방법도 고민해야 한다.
  • 결론 : Laravel이 99.99994% 이상의 웹 애플리케이션을 위한 환상적인 선택이라는 것

The Ultimate Guide to Getting Started With Laravel

https://blog.freshbits.in/the-ultimate-guide-to-getting-started-with-laravel

Gaurav Makhecha의 Laravel 시작을 위한 궁극의 가이드.
초보자가 처음부터 Laravel을 배울 수 있도록 도와주는 포괄적이고 긴 튜토리얼입니다.

Eloquent Performance: 4 Examples of N+1 Query Problems

https://laravel-news.com/laravel-n1-query-problems

Laravel Daily의 Povilas Korop이 이야기하는 N+1 Query의 4가지 사례

  • Case 1. 일반적인 N+1 Query
  • Case 2. Two Important Symbols.
  • Case 3. “Hidden” Relationship in Accessor.
  • Case 4. Be Careful with Packages.

Laravel 8.43부터 built-in N+1 Query detector가 도입됐습니다!

How to add a spotlight-like search field to your Laravel app by Freek Van der Herten.

https://freek.dev/2251-how-to-add-a-spotlight-like-search-field-to-your-laravel-app

Freek Van der Herten의 Laravel 앱에 스포트라이트 같은 검색 필드를 추가하는 방법.
중첩된 메뉴가 끔찍하기 때문이죠.

Laravel DDD by Steve McDougall.

https://www.juststeveking.uk/getting-started-with-ddd-in-laravel/

Laravel에서 DDD 시작하기.

roelofjan-elsinga/aloia-cms

https://github.com/roelofjan-elsinga/aloia-cms

라라벨에서 drop-in CMS를 구현하기 위한 패키지. 컨텐츠를 저장하기 위해 파일을 사용합니다.

The Laravel Idea plugin for PhpStorm collaborated with Christoph Rumpel to bring

https://laravel-idea.com/

PhpStorm용 Laravel Idea 플러그인. Christoph Rumpel과 협력 하여 📺 비디오 자습서 시리즈를 제공 합니다.

기타

Attribute usage in the top-1000 PHP packages

https://stitcher.io/blog/attribute-usage-in-top-php-packages

Brent Roose의 상위 1000개 PHP 패키지에서 Attribute 사용 여부 조사.
스포일러: 그들 중 20%만이 Attribute를 사용하며 가장 많이 사용되는 Attribute는 #[ReturnTypeWillChange]입니다.

📺 Dealing with deprecations by Brent Roose.

https://stitcher.io/blog/dealing-with-deprecations

Brent는 PHP 8.2에 많이 추가된 deprecation에 효과적으로 대처하는 방법에 대해 설명합니다.

그건 그렇고, PhpStorm에서 #[Deprecated(reason: '', replacement: '')] attribute로 업그레이드하는 방법을 사용자에게 지시할 수 있습니다 - 자세히 알아보기.

Dockerize a PHP Application with CI/CD by Rafie Younes.

https://semaphoreci.com/community/tutorials/dockerizing-a-php-application

How to profile your PHP applications with Xdebug by Vincent Brouté.

https://www.vincentbroute.fr/blog/how-to-profile-your-php-applications-with-xdebug/

Xdebug로 PHP 애플리케이션을 프로파일링하는 방법 .

Much ado about null by Larry Garfield.

https://peakd.com/hive-168588/@crell/much-ado-about-null

왜 당신이 정말로 그 null type을 사용하고 싶은지, 그리고 당신이 그 대신에 무엇을 해야 하는지.

Move that foreach() inside the method by Damien Seguy.

https://www.exakat.io/en/move-that-foreach-inside-the-method/

여러 PHP 함수는 단일 또는 다중 값으로 작동합니다. 예를 들어 array_merge()는 여러 배열을 하나로 병합합니다.
각 요소를 개별적으로 처리하기 위해 동일한 메서드를 여러 번 호출하는 대신 인수 목록을 한 번에 처리하여 약간의 성능 향상을 얻을 수 있습니다.

역자 주:
지난 php-annotated에 소개된 Speeding up array_merge()도 참고하세요.

Steve Bauman(@SteveTheBauman)의 트윗

https://twitter.com/SteveTheBauman/status/1525525749461135361

Today I learned you can unpack conditionally in PHP, pretty neat! 👌
Steve Bauman(@SteveTheBauman)의 트윗

Hadi Hariri(@hhariri)의 트윗

https://twitter.com/hhariri/status/1524018677116506114

“언젠가 여러 구현을 가질 수 있기 때문에 인터페이스를 선언하고 있습니다.”라고 말하는 사람이 있죠.
물론입니다. 그 날이 오면 Extract Interface 리팩토링을 수행하세요. 대부분의 IDE는 한 번의 클릭으로 이를 수행합니다. 그때까지 인터페이스를 삭제하십시오.

Community

friendsofphp.org

https://friendsofphp.org/

가까운 PHP 모임을 찾아보세요! 그들이 마침내 돌아왔습니다! 또한 가상 이벤트를 제공하는 새로운 PHP Mega Meetup GroupMerge PHP도 있습니다.

📺 The PHP Roundtable podcast - Back at the Table in episode 84

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

With Sara Golemon, Joe Ferguson, Ben Ramsey, and Eric Van Johnson.

awesome new paper elephants by Vincent Pontier

https://www.vincentpontier.com/elephpant/categorie-produit/phpaper-toy/?orderby=price

Vincent Pontier의 멋진 새 종이 코끼리 를 확인하세요.

종이 코끼리 이미지

thelia.net/#Elephant

https://thelia.net/#Elephant

고전적인 플러시 천 디자인을 선호한다면 여기 당신의 무리에 추가할 만한 멋진 품목이 있습니다!

플러시 천 코끼리 인형 이미지

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 봄 버전의 번역/해석본입니다.

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


News

PHP 7.4.29, PHP 8.1.5, and PHP 8.0.18

https://www.php.net/ChangeLog-7.php#7.4.29
https://www.php.net/ChangeLog-8.php#8.1.5
https://www.php.net/ChangeLog-8.php#8.0.18

내장된 종속성의 업데이트로 인한, Windows 사용자를 위한 보안 릴리스입니다. Windows가 아닌 사용자의 경우 일반적인 버그 수정 업데이트일 뿐입니다. PHP 7.3의경우 보안 문제가 있더라도 업데이트가 더 이상 릴리스되지 않습니다. PHP 7.3 또는 PHP 5.x 버전을 계속 사용하고 있다면 가능한 한 빨리 업데이트하는 것이 좋습니다.

Symfony 팀은 다가오는 Symfony 6.1 릴리스에서 최소 필수 PHP 버전을 8.1로 올렸습니다. Drupal 10 과 Laravel 10에서도 동일한 변화가 이루어졌습니다.

또한 최근 출시된 Ubuntu 22.04 LTS 에는 PHP 8.1이 사전 설치된 상태로 제공됩니다.

Updates from the PHP Foundation

https://opencollective.com/phpfoundation

  • 6명의 후원 개발자가 활발하게 핵심(core) 영역을 유지관리하고 있습니다.
    • PHP Foundation Core Developers를 구하는 것이 2022년의 목표였고 이 6명이 초기 멤버로 활동하게 됩니다.
    • 이 중에는 Xdebug의 Derick Rethans도 있는데, 일주일에 하루 일을 한다는 트윗을 남긴 것으로 보아 위 개발자들이 모두 full-time으로 일을 하는 것은 아닌가 봅니다.
  • php.foundation 웹사이트가 가동 중입니다.
    • 후원사가 많이 늘었네요. OP.GG도 꾸준히 후원하고 있습니다.
  • Core 개발에 대한 통찰력이 담긴 별도의 뉴스레터가 정기적으로 발행될 것입니다. 다음은 초판입니다: PHP Roundup #1.
  • Sebastian Bergmann의 핵심 개발자 인터뷰.

Developer Ecosystem Survey 2022

https://surveys.jetbrains.com/s3/t-developer-ecosystem-survey-2022

JetBrains의 연례 설문조사가 막 시작되었으며 물론 PHP에 대한 섹션도 있습니다. 작년의 결과에서와 같은 것을 볼 수 있을 것입니다. 설문조사에 참여해서 경품을 받을 수 있는 기회를 잡으세요!

News from PHP-FIG

  • Coding Style PER (PHP Evolving Recommendation)은 PHP-FIG에서 공식적으로 승인했으며 PSR-12를 대체합니다. 이것은 “라이브” 표준을 보여주는 최초의 PER 문서입니다. PER 덕분에 PHP에 새로운 구문이 추가될 때마다 다른 PSR 표준을 발표할 필요가 없습니다. 대신 SemVer에 따라 PER이 업데이트됩니다.
  • 새로운 PSR 초안이 승인되었습니다: PSR-22 – Application Tracing.

PhpStorm 2022.1 released

https://blog.jetbrains.com/phpstorm/2022/04/phpstorm-2022-1-release/

Blade, WordPress, ArrayShape annotation 등에 대한 개선 사항이 함께 제공됩니다. 짧은 What’s New 비디오를 확인하거나 전체 스토리를 보려면 블로그 게시물을 읽으십시오.

Composer 2.3 Release

https://blog.packagist.com/composer-2-3/

이 릴리스는 사용자 및 현대화된 내부 코드베이스를 위한 약간의 개선 사항을 제공합니다.

최근에 발견된 취약점도 있었습니다. CVE-2022-24828: Composer Command Injection. composer.json에 있는 URL에 명시적으로 나열된 Git 또는 Mercurial 리포지토리를 제어하는 공격자는 특수하게 조작된 분기 이름을 사용하여 composer 업데이트를 실행하는 시스템에서 명령을 실행할 수 있습니다.

composer self-update를 실행하여 Composer가 최신 상태인지 확인하십시오.

Craft CMS 4

https://craftcms.com/blog/craft-4?ref=phpannotated

인기 있는 오픈 소스 CMS의 주요 업데이트가 릴리스되었습니다.

PHP Core

Core 뉴스의 대부분은 PHP Foundation의 PHP Roundup 시리즈에서 자세히 다루므로 간략하게만 언급하겠습니다.

Last call for PHP 8.2 release managers!

https://externals.io/message/117595#117664

PHP 8.2 릴리스 관리자를 구하는 마지막 요청입니다!
3년 반을 약정할 수 있어야 하며 PHP, Git, 가급적이면 C에 대한 지식이 있어야 합니다. 이미 베테랑 후보자 1명과 신인 후보자 6명이 있습니다.

✅ [RFC] Redacting parameters in back traces #PHP8.2

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

예외 시 back trace 기록에서 민감한 정보를 노출하는 것을 막기 위해 함수의 매개변수에 적용할 수 있는 새로운 표준을 제시했습니다.

✅ [RFC] Allow null and false as stand-alone types #PHP8.2

https://wiki.php.net/rfc/null-false-standalone-types

현재 null은 단일 유형으로 선언할 수 없습니다. false는 더 나아가 전통적으로 null 대신 오류 상태를 전달하기 위해 사용됐고, 이게 union type RFC에 “literal type”으로 소개된 주요 이유였습니다.

이 RFC에선 null과 false를 단일 타입으로 사용할 수 있도록 제안합니다.

✅ [RFC] Deprecate ${} string interpolation #PHP8.2

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

PHP는 큰따옴표( “) 및 heredoc을 사용하여 다양한 방식으로 문자열에 변수를 포함할 수 있습니다.

  • 변수 직접 포함(“$foo”)
  • 변수 외부의 중괄호(“{$foo}”)
  • 달러 기호 뒤의 중괄호(“${foo}”)
  • 가변적인 변수(“${expr}”, (string) ${expr}와 동일한 표현)

옵션 1과 2에는 장단점이 있습니다. 옵션 3과 4는 중복되는 구문으로 인해 쉽게 혼동되고, 3은 1과 2보다 성능이 완전히 떨어지며, 4는 문자열 보간에서 거의 유용하지 않은 완전히 다른 의미를 갖습니다.

이 RFC 는 PHP 8.2에서 옵션 3과 4를 더 이상 사용하지 않고 PHP 9.0에서 제거할 것을 제안합니다.

✅ [RFC] Deprecate and Remove utf8_encode and utf8_decode

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

  • PHP 8.2에서 utf8_encode 및 utf8_decode의 모든 사용은 표준 E_DEPRECATED 진단을 발생시킵니다.
  • PHP 9.0에서는 utf8_encode 및 utf8_decode 함수가 PHP에서 제거됩니다.
  • 문서나 사용 중단(deprecation) 메시지는 사용자가 사용 방법이 올바른지 확인하고 기본 대체제로 mb_convert_encoding를 권장하며 UConverter::transcode와 iconv도 선택지로 나열하도록 권장합니다.

✅ [RFC] Undefined Variable Error Promotion

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

이 RFC는 정의되지 않은 변수에 액세스하는 것이 PHP의 다음 메이저 버전(Target: PHP 9.0)에서 잘못된 동작으로 렌더링되고, 정의되지 않은 변수에 액세스하면 오류 예외가 발생할 것을 제안합니다.

🗳 [RFC] Readonly classes

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

PHP 8.1은 PHP RFC: Readonly properties 2.0을 통해 읽기 전용 속성에 대한 지원을 추가 했습니다. 그러나 특히 많은 속성을 포함하는 경우 (준)불변 클래스를 선언하는 것은 여전히 쉽지 않습니다. 따라서 이 RFC는 readonly 클래스에 대한 지원을 추가할 것을 제안합니다.

투표는 2022-05-11까지인데, 10일 현재 27:6으로 찬성이 우세합니다.

❌ [RFC] Sealed Classes

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

봉인된 클래스는 속성 값 목록에 명명된 클래스에 의해서만 직접 확장될 수 있도록 제안되었으나 투표는 2/3의 찬성표를 얻지 못하고 거부(Decline)되었습니다.

🆕 [RFC] Add true type

https://wiki.php.net/rfc/true-type

위에서 언급한 null and false as standalone types이 통과됨에 따라 true도 독립된 타입으로 승격하자는 제안입니다.

🆕 [RFC] Disjunctive Normal Form Types

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

DNF(Disjunctive Normal Form)는 부울 표현식을 구성하는 표준 방법입니다.

이 RFC 는 합집합과 교집합 유형을 허용하기 위해 DNF 유형을 지원할 것을 제안합니다.

[RFC] final class Collections\Deque

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

최적화된 데이터 구조를 PHP에 추가하려는 계획의 일환으로 첫 번째 제안이 준비되었습니다.
Deque – 이것은 양방향 대기열입니다. 즉, 시작과 끝에서 항목을 추가 및 제거할 수 있습니다. SplQueue또는 SplDoublyLinkedList 대신 사용하여 성능을 향상시키고 메모리 소비를 줄일 수 있습니다.

RFC Introduce a class-string type

https://gist.github.com/cspray/0f4e67e8731a8ea9382147707e75287f

공식 RFC는 아니지만 class-string을 실제 유형으로 만드는 것은 흥미로운 아이디어입니다. 이미 정적 분석기의 주석에서 널리 사용되기 때문입니다.

Tools

CanIPHP.com

https://caniphp.com/

caniuse.com처럼 PHP 기능별로 사용할 수 있는 버전을 찾을 수 있습니다.

clue/stream-filter

https://github.com/clue/stream-filter

PHP에서 스트림 필터링에 대한 간단하고 현대적인 접근 방식입니다.

PHP에서 스트림 필터를 사용하여 이런 미친 짓도 할 수 있고, 반대로 이렇게 실용적인 것도 할 수 있습니다.

(두 예시는 final 키워드를 제거하거나 모든 접근 제한을 푸는 행위를 하고 있어서 저는 둘 다 미친 짓처럼 보이기도…)

sfx101/deck

https://github.com/sfx101/deck

PHP 초보자에게 유용할 수 있는 로컬 웹 개발 환경의 빠른 시작 및 구성을 위한 GUI 도구입니다.

marijnvanwezel/try

https://github.com/marijnvanwezel/try

단일 명령으로 Composer 패키지를 사용해 볼 수 있는 간단한 CLI 도구입니다. 그냥 설치하고 실행 해보세요: try %vendor%/%package%.

frodeborli/moebius

https://github.com/frodeborli/moebius

PHP 버전 8.1 이상을 위한 Golang과 유사한 코루틴. 저자는 자신의 이벤트 루프 구현체와 자체 테스트 프레임워크를 사용했습니다.

Fiber를 사용하고, Swoole과도 비슷해보이지만 별도 extension이 필요 없습니다.

Crell/AttributeUtils

https://github.com/Crell/AttributeUtils

속성(attribute))의 구문 분석 및 관리를 용이하게 하는 유틸리티입니다.

doctrine/annotations 혹은 doctrine annotation interface가 적용된 PHP 8의 속성을 모두 읽을 수 있는 koriym/Koriym.Attributes도 흥미롭습니다.

spatie/visit

https://github.com/spatie/visit

모든 URL의 응답을 아름답게 표시하는 CLI HTTP 클라이언트입니다. colorize(code highlighting)하기 위해 bat과 jq를 사용합니다.

Think of it as curl for humans.

laravel/valet

https://github.com/laravel/valet

Mac용 경량 로컬 개발 환경입니다. Docker 또는 VirtualBox 대신 기본 Nginx와 PHP만 있습니다. 라라벨 뿐만 아니라 모든 프로젝트에서 사용할 수 있으며 v3부터는 폴더(프로젝트)마다 PHP 버전을 다르게 사용할 수 있습니다.

roach-php/core

https://github.com/roach-php/core

PHP를 위한 완벽한 웹 스크래핑 툴킷.

PHPStan 1.6.0

https://phpstan.org/blog/phpstan-1-6-0-with-conditional-return-types

조건부 리턴 타입 및 정수(integer) 마스크를 지원하여 출시되었습니다.

flow-php/etl

https://github.com/flow-php/etl

ReactPHP 또는 Amphp를 통한 비동기 처리를 지원하는 PHP용 ETL(Extract Transform Load) 데이터 처리 라이브러리입니다.

igorhrcek/wp-cli-secure-command

https://github.com/igorhrcek/wp-cli-secure-command/

WordPress 설치를 보호하는 하나의 CLI command.

williarin/wordpress-interop

https://github.com/williarin/wordpress-interop

다른 PHP 응용 프로그램에서 WordPress 데이터베이스에 더 쉽게 액세스할 수 있도록 하는 Doctrine/DBAL 기반 패키지입니다.

sj-i/php-profiler

https://github.com/sj-i/php-profiler
https://github.com/reliforp/reli-prof

php-profiler에서 reliforp/reli-prof로 이름을 바꾸고 있습니다.

순수 PHP(FFI)로 구현된 PHP용 샘플링 프로파일러입니다. flame 다이어그램을 생성하고, top-like 모드(demon mode도 있음)에서 trace 출력을 실행하는 등의 작업을 수행할 수 있습니다.

mrsuh/php-var-sizeof

https://github.com/mrsuh/php-var-sizeof

A function to get the memory size for any variable that promises to be more accurate compared to memory_get_usage(). Requires PHP 7.4 or higher with FFI.

memory_get_usage()에 비해 더 정확한, 모든 변수의 메모리 크기를 가져오는 함수 입니다. FFI를 사용하는 PHP 7.4 이상이 필요합니다.

davidcole1340/ext-php-rs

https://github.com/davidcole1340/ext-php-rs

Rust에서 PHP 확장을 빌드하기 위한 Zend API에 대한 바인딩입니다.

easysoft/phpmicro

https://github.com/easysoft/phpmicro

당신의 CLI 툴과 함께 (PHP에 구애받지 않는) 바이너리로 배포될 수 있도록 정적으로 컴파일된 마이크로 PHP 인터프리터입니다. Marcel Pociot가 프로세스를 자동화하기를 기대합니다!

While other people argue about PHP not being a good choice, I started working on making PHP/Laravel Zero apps truly portable

Symfony

See what’s coming in Symfony 6.1.

https://symfony.com/blog/category/living-on-the-edge/6.1

📺 Harmonious Development with Symfony 6

https://symfonycasts.com/screencast/symfony

이제 Symfony를 시작하기 위한 2시간 이상의 튜토리얼이 SymfonyCasts에서 완전히 무료로 제공됩니다.

Using Symfony Form in WordPress.

https://jolicode.com/blog/using-symfony-form-in-wordpress

WordPress에서 Symfony Form 사용하기

“Symfony: The Fast Track”

https://symfony.com/book

초보자와 숙련된 개발자 모두를 위한 공식 Symfony 책입니다. Symfony 6 기준.

Symfony Station Communiqué – April 29, 2022.

https://www.symfonystation.com/Symfony-Station-Communique-29-April-2022

Laravel

📺 Laravel Origins: The Documentary

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

이 비디오는 Laravel이 왜 생겨났는지, 지난 10년 동안 어떻게 성장했는지, 그리고 Taylor와 더 넓은 Laravel 커뮤니티의 미래에 대한 이야기를 알려줍니다.

Laravel Idea 5.3

https://laravel-idea.com/blog/2022/5-3-release

인기 있는 유료 PhpStorm 플러그인 업데이트.

LaravelProTips.com – A collection of useful articles and tweets.

https://laravelprotips.com/

유용한 기사 및 트윗 모음.

alexeymezenin/laravel-best-practices

https://github.com/alexeymezenin/laravel-best-practices

더 많은 Laravel 모범 사례.

한국어 버전은 2018년에 임영록(cherrypick)님이 번역해주셨습니다. 원래의 저장소는 작년까지도 계속 업데이트 되고 있었네요.

📺 Build a Laravel app and deploy it to production in 5 hours

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

Brent가 시작부터 프로덕션 배포까지의 과정을 5시간 동안 빠르게 진행합니다.

📺 Xdebug 3: Laravel Sail with PhpStorm.

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

Derick Rethans가 Laravel Sail Docker 환경에서 Xdebug를 활성화하고 설정하는 방법을 보여줍니다.

Yii

Yii news 2022, issue 1.

https://opencollective.com/yiisoft/updates/yii-news-2022-issue-1

Interview Questions For Yii 2

대부분은 일반적으로 PHP에 관한 것이며 모든 구직자에게 유용할 수 있습니다.

기타

Pascal Landau의 PHP 개발자용 Docker에 대한 포괄적인 게시물

https://www.pascallandau.com/docker-php-tutorial/

2022년 PHP 8.1 애플리케이션을 위한 Docker 시작하기, PHP 8.1에서의 PhpStorm, Docker 및 Xdebug 3 등 그의 웹 사이트에서 더 확인해보세요.

Posts on naming constructors by Andreas Möller and by Stefan Priebsch.

Naming constructors(생성자에 이름을 지어주기)에 관한 두가지 글입니다.

Matthias Verraes의 Named Constructors in PHP에서 출발하는 글입니다. 기본 생성자 하나만 제공되는 PHP에서 constructor 대신 도메인을 충분히 표현하는 static method로 overloading이 안 되는 문제를 보완하는 방식입니다.

class SomeValueObject
{
private function __construct(
...
) {
...
}

public static function fromInt(int $value): self
{
...
}

public static function fromString(string $value): self
{
...
}
}

How the Middleware Pattern works and can easily be applied in PHP.

https://doeken.org/blog/middleware-pattern-in-php

미들웨어 패턴이 작동하는 방식과 PHP에서 쉽게 적용할 수 있는 방법.

How To Mock Functions That Have External HTTP Requests.

https://hermanradtke.com/how-to-mock-functions-that-have-external-http-requests/

외부 HTTP 요청이 있는 함수를 mocking하는 방법.

Writing Readable PHP

https://writing-readable-php.com/

Freek Van der Herten과 Christoph Rumpel의 유료 강좌로, 여러분과 여러분의 동료 및 미래의 자신을 위해 코드를 즐겁게 읽을 수 있는 간단한 팁을 제공합니다.

PHP Tricks: Multi-value match()

https://peakd.com/hive-168588/@crell/php-tricks-multi-value-match

하나의 match 표현식(PHP 8.0 이상)에서 여러 값을 비교할 수 있다는 것을 알고 계셨습니까? 이와 같이:

function mayFriend(User $u1, User $u2, Group $group): FriendPermission
{
return match ([$u1->inGroup($group), $u2->inGroup($group)]) {
[true, true] => FriendPermission::Allow,
[true, false] => FriendPermission::WithApproval,
[false, true] => FriendPermission::WithApproval,
[false, false] => FriendPermission::Deny,
};
}

Interfaces are not class templates

https://www.exakat.io/en/interfaces-are-not-class-templates/

메서드가 없는 유효한 인터페이스를 활용하는 방법을 설명합니다.

Speeding up array_merge().

https://www.exakat.io/en/speeding-up-array_merge/

배열을 합치기 위해 loop 안에서 여러번 array_merge를 호출하지 말고, array_merge가 여러 인자를 받을 수 있으므로 한번에 실행하라고 조언합니다.
여러 인자를 받을 수 있는 implode(), array_sum()도 마찬가지의 효과가 있습니다.
최신 버전의 PHP를 쓰기만해도 성능 개선 효과를 볼 수 있습니다.

All the Dynamic Syntaxes in PHP – Good source for interview questions?

https://www.exakat.io/en/all-the-dynamic-syntaxes-in-php/

PHP의 동적 구문.

Solving Open Source Supply Chain Security for the PHP Ecosystem

https://paragonie.com/blog/2022/01/solving-open-source-supply-chain-security-for-php-ecosystem

PHP 생태계를 위한 오픈 소스 공급망 보안 해결. Paragon IE 사람들의 계획(initiatives)에 대한 흥미로운 게시물입니다. 그들은 이제 앱과 종속성을 안전하게 업데이트하기 위해 Gossamer라는 도구를 개발하고 있습니다. 이전에는 PHP 코어에 libsodium을 도입 하고 JWT에 대한 더 안전한 대안인 Paseto를 만들고 다른 도구도 개발했습니다.

Service locator: an anti-pattern.

https://stitcher.io/blog/service-locator-anti-pattern

라라벨의 파사드나 헬퍼 함수가 Service locator 패턴을 기반으로 만들어져있고, 여기에서 발생하는 문제를 설명합니다. 이런 문제는 의존성 주입이 해결한다고 결론을 냅니다.

(Brent가 2018년 stitcher에 쓴 글인데, 왜 지금 추천을 했는지는 모르겠네요.)

📺 Xdebug 3: Debugging Unit Tests with PhpStorm.

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

Derick Rethans의 강의 영상입니다.

📺 Learn PHP The Right Way – Full PHP course in 88 videos for free.

https://www.youtube.com/playlist?list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-

88개 동영상이 포함된 전체 PHP 과정을 무료로 제공합니다.

Generics

PHP는 최근에 제네릭 관련 활동을 많이 보였으므로 이 포스트에서 제네릭 관련 섹션을 제공합니다.

  • 📺 먼저 Brent의 Generics에 대한 비디오 시리즈 Generics in PHP를 확인하세요.
  • 더 자세히 알아보려면 Generics 구현 접근 방식에 대한 게시물에 관심이 있을 수 있습니다 .
  • PHP로 구현하는 흥미로운 프로젝트를 시도해보세요 : mrsuh/php-generics. 흥미롭게도 Reddit 에서는 성능을 위해 PHP에서 런타임 유형 검사를 삭제하는 것에 대한 토론이 있었습니다. 위의 도구는 타입 제거 방식(Type erasure)을 구현하므로 이론적으로는 다음과 같이 성능 관련 사례로 사용할 수 있습니다 : composer dump-generics --type=type-erasure.
  • 제네릭의 주요 응용 프로그램 중 하나는 컬렉션입니다. Comparing PHP Collections이라는 글을 확인하십시오.
  • 그리고 마지막으로 @SerafimArts의 재미있는 작품을 소개합니다.

generics gif by SerafimArts

Community

(PHP 뽕 주의)

📺 PHP isn’t dead, featuring the Laravel Origins cast.

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

PHP is definitely the best array-oriented programming language

https://twitter.com/savant/status/1519785011381161984

“PHP doeSNt sCaLE”

https://twitter.com/levelsio/status/1520354529421983745

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2022년 1월호의 번역/해석본입니다.

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


News

The PHP Foundation Update, January 2022

https://opencollective.com/phpfoundation/updates/the-php-foundation-update

PHP 재단은은 PHP 언어의 장수와 번영을 보장하는 것을 사명으로 하는 비영리 조직으로 11월 말에 작업을 시작했습니다.

우리는 이미 첫 번째 결과를 얻었습니다. 핵심 개발자들의 후원 신청이 접수되어 처리 중입니다.

재단 팀은 월간 업데이트를 게시할 예정이므로 Twitter @thephpf를 구독하면 최신 뉴스를 받아볼 수 있습니다.

PHP 재단에 대한 자세한 내용은 Joe Watkins, Sara Golemon 및 Sebastian Bergmann이 진행하는 Voices of the ElePHPant Ep 366 팟캐스트를 확인하십시오.

PHP 8.0.15, PHP 8.1.2, PHP 7.4.27

https://www.php.net/ChangeLog-8.php#8.0.15
https://www.php.net/ChangeLog-8.php#8.1.2
https://www.php.net/ChangeLog-7.php#7.4.27

최신 PHP branch의 버그 수정이 릴리스되었습니다. PHP 7.4의 경우 마지막 정기 릴리스이며, 이제부터는 PHP 7.4 branch는 보안 업데이트만 발행됩니다.

PHP version stats: January, 2022

https://stitcher.io/blog/php-version-stats-january-2022

다음은 packagist.org에 따른 PHP 버전에 대한 몇 가지 새로운 통계입니다. 버전 8.1이 나온 지 두 달밖에 안됐지만 이미 9.1%의 점유율을 기록했습니다. 그러나 여전히 PHP 7.4(44%)가 많이 있습니다.

Usage Statistics 이미지

[RFC] User Defined Operator Overloads

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

PHP에 연산자 오버로딩을 추가하자는 제안이 투표를 통과하지 못했습니다. 그러나 저자 Jordan LeDoux와 함께하는 PHP Internals News 팟캐스트에서 자세한 내용을 들어볼 수 있습니다.
Jordan은 또한 PHP용 RFC를 만드는 방법에 대한 매우 철저한 지침을 발표했습니다.

그동안 lisachenko/z-engine 및 FFI 덕분에 연산자 오버로딩을 이미 PHP에서 사용할 수 있습니다. 행렬에 대한 연산자 구현의 예는 lisachenko/native-php-matrix를 참조하십시오.

Releases

thephpleague/flysystem 3.0.0

https://github.com/thephpleague/flysystem

파일 시스템 작업을 위한 인기 라이브러리의 메이저 업데이트입니다. 자세한 내용은 블로그 게시물을 확인하세요.

Cycle 2.0

https://spiralscout.com/blog/meet-cycle-2-0

Cycle의 두 번째 메이저 릴리스 - 전통 방식 및 데몬화된 PHP 애플리케이션 모두에서 사용할 수 있는 PHP용 DataMapper 및 ORM입니다.

ankitpokhrel/tus-php 1.0

https://github.com/ankitpokhrel/tus-php

재개 가능한 파일 업로드를 위한 개방형 프로토콜인 tus.io의 서버 및 클라이언트 구현. 이 프로토콜은 Vimeo 및 Cloudflare 등에서 사용됩니다.

Infection PHP 0.26.0

https://infection.github.io/2022/01/10/whats-new-in-0.26.0/

PHP mutation 테스트 프레임워크에 대한 업데이트입니다. 새 버전은 HTML 보고서, 추가되거나 수정된 줄만 변형하는 등을 기능을 추가합니다.

Doctrine ORM 2.11

https://www.doctrine-project.org/2022/01/11/orm-2.11.html

이 업데이트는 열거형, 가상 컬럼, 읽기 전용 속성, 중첩 속성 등에 대한 지원을 제공합니다.

Roave/BetterReflection 5.0

https://github.com/Roave/BetterReflection/releases/tag/5.0.0

향상된 리플렉션 API: 클래스를 로드하지 않고도 클로저 등에서 정보를 얻을 수 있습니다.
새 버전은 PHP 8.1 지원을 추가하고 더 나은 성능을 제공합니다.

Tools

viewi/viewi

https://github.com/viewi/viewi

PHP와 HTML만을 사용하여 반응형 애플리케이션을 만들기 위한 강력한 도구입니다. 본질적으로 이것은 서버 측 템플릿 엔진 + 프론트엔드 프레임워크입니다. 그러나 핵심은 모든 구성 요소와 논리를 PHP로 설명한 다음 도구가 이를 기본 JS로 변환한다는 것입니다.

프로젝트 웹사이트 viewi.net작동 메커니즘을 자세히 설명하고 코드 예제를 제공합니다. 단계별 자습서를 따라할 수도 있고 Symfony와 통합하는 방법을 확인할 수도 있습니다.

Roach PHP

https://roach-php.dev/

인기 있는 Python 라이브러리인 Scrapy에서 영감을 받은 웹 스크래핑 도구입니다.

symfony/html-sanitizer

https://github.com/symfony/html-sanitizer

신뢰할 수 없는 HTML을 정리하고 XSS로부터 보호하는 새로운 컴포넌트입니다. HTML Purifier의 좋은 대안이 될 수 있습니다.

EventSaucePHP/ObjectHydrator

https://github.com/EventSaucePHP/ObjectHydrator

원시 데이터(예: JSON)를 객체로 변환해주는 라이브러리입니다.

ajthinking/archetype

https://github.com/ajthinking/archetype

PHP 파일/클래스를 수정하기 위한 간단한 인터페이스입니다.

framjet/php-enum-bitmask

https://github.com/framjet/php-enum-bitmask

PHP 8.1의 열거형을 BitMask로 사용하기.

beyondcode/httpdump

https://github.com/beyondcode/httpdump

HTTP 요청을 디버깅하기 위한 Laravel 애플리케이션(web hook 디버깅 등). 임의의 URL을 만들고 그곳으로 가는 모든 요청을 훌륭하게 덤프합니다. httpdump.app에서 작동하는 것을 볼 수 있습니다.

spatie/ignition

https://github.com/spatie/ignition

Laravel의 많은 사람들에게 친숙하지만 이제 프레임워크에 독립적인 디버깅 오류 페이지를 표시하기 위한 이 라이브러리가 업데이트되었으며 모든 애플리케이션에서 사용할 수 있습니다.

디버깅을 위한 오류 페이지를 만들 수 있는 이 라이브러리는 Laravel의 많은 것과 비슷하지만, 이제 프레임워크에 독립적이어서 어느 어플리케이션에서나 사용할 수 있습니다. Overview 블로그 게시물을 확인하세요.

chevere/xr

https://github.com/chevere/xr

Spatie/ray에서 영감을 받은 ReactPHP의 디버그 서버이지만 데스크톱 애플리케이션 대신 CLI 명령으로 실행합니다. 비디오 데모.

JustSteveKing/php-sdk, Sammyjo20/Saloon

https://github.com/JustSteveKing/php-sdk
https://github.com/Sammyjo20/Saloon

동일한 아이디어를 가진 두 개의 유사한 라이브러리: 서비스용 SDK 생성을 단순화하거나 공통 스타일로 다른 API에 접근할 수 있게 구성합니다.

AliSaleem27/wordle-cl

https://github.com/AliSaleem27/wordle-cli

인기 있는 5글자 단어 추측 게임 Wordle의 CLI 버전입니다.

staabm/phpstan-dba

https://github.com/staabm/phpstan-dba

PDO, MySQLi 및 Doctrine/DBAL에서 SQL 쿼리의 유효성을 확인하는 PHPStan용 extension입니다. 데모.

flow-php/etl

https://github.com/flow-php/etl

PHP 애플리케이션에서 사용할 Extract Transform Load 패턴의 구현입니다. 자세한 내용은 작성자의 스레드를 확인하세요.

Symfony

The symfony-cli tool has been open-sourced

https://github.com/symfony-cli/symfony-cli

Symfony 관련 작업 외에도 이 도구에는 MAMP/WAMP의 최신 대안으로 사용할 수 있는 로컬 서버가 포함되어 있습니다. 여러 버전의 PHP를 지원하고(각 프로젝트에서 자체적으로 지정할 수 있음) Docker, 로컬 도메인 및 자동화된 HTTPS와 통합됩니다. 이 도구는 Go로 구현되며 Linux, macOS 및 Windows에서 사용할 수 있습니다.

A better way to quickly start Symfony projects

https://symfony.com/blog/a-better-way-to-quickly-start-symfony-projects

Introducing the Symfony 6 Certification – 90 minutes for 75 questions from 15 topics.

https://symfony.com/blog/introducing-the-symfony-6-certification

15개 주제에서 75개 질문에 대해 90분 동안 시험을 치고 Symfony 6 인증서를 받아보세요.

Organizing your Symfony project tests

https://www.strangebuzz.com/en/blog/organizing-your-symfony-project-tests

테스트를 용도(+속도)에 맞게 아래와 같이 디렉토리를 구분하고 별도로 실행할 수 있게 구성했습니다.

  • Unit tests
  • Integration tests
  • Api tests
  • Functional tests
  • End-to-end tests
  • External tests

The key concepts of Symfony’s Security package in 5 minutes

https://alex-daubois.medium.com/symfonys-security-key-concepts-in-5-minutes-e18033c26b35

Symfony 6 Security component를 설명합니다.

  • User, password and roles
  • User Providers
  • Firewalls
  • Voters and ACL
  • Authenticators, passports and badges

Symfony Messenger 💛 systemd

https://jolicode.com/blog/symfony-messenger-systemd

Use PHP Enums as Doctrine type in Symfony

https://smaine-milianni.medium.com/use-php-enums-as-doctrine-type-in-symfony-85909aa0a19a

Build Symfony and Doctrine ORM Applications with ease using Ecotone

https://blog.ecotone.tech/build-symfony-application-with-ease-using-ecotone/

norberttech/static-content-generator-bundle

https://github.com/norberttech/static-content-generator-bundle

Symfony 애플리케이션에서 정적 HTML 페이지를 생성합니다.

Using custom PHP attributes for registering and configuring Symfony Messenger handlers

https://angelovdejan.me/2022/01/09/custom-php-attributes-for-symfony-messenger-handlers.html

JSON Columns and Doctrine DBAL 3 Upgrade

https://dunglas.fr/2022/01/json-columns-and-doctrine-dbal-3-upgrade/

Laravel

Laracon Online is on Feb 9, and it’s free

https://laracon.net/

컨퍼런스는 보통 유료지만 이번 Laracon Online Winter는 유튜브에서 무료로 중계됩니다.

Building a multi-room chat application with Laravel and Centrifugo

https://centrifugal.dev/blog/2021/12/14/laravel-multi-room-chat-tutorial

Laravel과 Centrifugo로 멀티룸 채팅 애플리케이션 구축하기

Centrifugo : real-time messaging server).

Managing Laravel services

https://downing.tech/posts/managing-laravel-services

Clean Integrations 시리즈 중 세 번째입니다.

  1. Automating Tweets when publishing a new post
  2. Testing APIs and Services in Laravel
  3. Managing Laravel services

Laravel Pseudo-Daemons

https://aaronfrancis.com/2020/laravel-pseudo-daemons

Laravel command의 한계를 극복하고자, Supervisor 구성 없이 코드에 의해 제어되는 유사-데몬을 만든 경험을 공유합니다. 2020년 글이네요.

Primitive Types in Controllers and Closure Routes

https://laravel-news.com/primitive-types-in-controllers-and-closure-routes

How to scale Laravel project on AWS without breaking the bank.

https://laravel-news.com/primitive-types-in-controllers-and-closure-routes

LaravelDaily/Laravel-Roadmap-Learning-Path

https://github.com/LaravelDaily/Laravel-Roadmap-Learning-Path

간단한 것부터 복잡한 것까지 라라벨을 배우기 위한 체계적인 자료 모음입니다.

Building an API using TDD in Laravel

https://laravel.io/articles/building-and-api-using-tdd-in-laravel

Efficient Pagination Using Deferred Joins

https://aaronfrancis.com/2022/efficient-pagination-using-deferred-joins

-- Page 3
select * from users order by created_at desc limit 15 offset 30;

Pagination 구현 시 위와 같이 쿼리하곤 하는데, 이 경우 database에선 모든 row를 읽은 후 offset 이후의 값을 응답합니다. 이를 더 효율적으로 가져오려면 커서 기반으로 조회해야 하는데,

-- Page 3 (Assuming the max ID from page two was 72.)
select * from users where id > 72 order by id limit 15;

Laravel 문서에는 오프셋과 커서 사이의 절충점에 대한 몇 가지 좋은 컨텍스트가 있습니다.
https://laravel.com/docs/8.x/pagination#cursor-vs-offset-pagination

이 글에서는 지연된 조인으로 offset/limit이 적용될 때까지 요청된 열에 대한 액세스를 연기하는 기술입니다.

select * from contacts          -- The full data that you want to show your users.
inner join ( -- The "deferred join."
select id from contacts -- The pagination using a fast index.
order by id
limit 15 offset 150000
) as tmp using(id)
order by id -- Order the single resulting page as well.

이 글에서는 이 아이디어를 Laravel로 구현하는 예제와 더 나은 성능을 위한 MySQL 튜닝 아이디어 그리고 많은 이들의 성능 개선 간증이 이어집니다.

45 New Laravel Tips 2022

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

Yii

Yii 1.1.25

https://www.yiiframework.com/news/419/yii-1-1-25-is-released

Yii 프레임워크의 첫 번째 버전은 활발히 개발되지 않지만 호환성을 위한 수정은 계속 나오고 있습니다. 이 업데이트는 PHP 8.0에 대한 몇 가지를 수정합니다.

The first stable releases for some Yii 3 components have also been released

기타 읽을 만한 글

Trying out PHP after 7 years

https://www.kode-krunch.com/2021/12/trying-out-php-after-7-years.html

7년 전 Java에만 집중하기 위해 PHP를 떠났던(당시 PHP 사용하던 버전은 5.3) 개발자가 천지개벽한 PHP 생태계를 만나 이제 쓸만 하다고 생각한다는 내용.

자신의 경험을 토대로 Symfony Demo를 다시 만들어 본 경험을 2부작으로 게시하기도 했습니다.
PHP: Symfony Demo meets Modular, Microservice-ready Architecture - Part 1, Part 2

7년 전에 PHP 커뮤니티에 PHP 언어가 오늘날의 모든 기능을 가질 것이라고 말하면 그들은 당신이 미쳤다고 생각할 것입니다.

PHP in 2022

https://stitcher.io/blog/php-in-2022

Brent Roose가 쓰는 PHP 생태계 overview.

매년 “PHP in 20XX” 포스트를 쓰는 것은 이번이 네 번째이며, 올해만큼 흥분한 적이 없었다는 것을 인정해야 합니다.

PHP 8.1

열거형
생성자에서 new 사용
readonly properties

PHP에 추가된 최신 기능을 확인하시려면 PHP 2021 3분 요약 비디오를 보고 오셔도 좋습니다.

Static Analysis

PHP의 정적 분석이 크게 성장하고 있습니다.

PHP에서 정적 분석이 중요한 이유와 이에 대해 열광하는 이유에 대해 간단히 읽고 싶다면 우리는 런타임 유형 검사가 필요하지 않습니다라는 블로그 게시물을 확인할 수 있습니다.

The PHP foundation

2개월 전, PHP 세계는 2021년의 가장 큰 뉴스일 수도 있는 꽤 큰 뉴스를 받았습니다. 가장 활동적인 핵심 유지 관리자 중 한 명인 Nikita가 LLVM 작업을 위해 자리에서 물러나지만 동시에 PHP core 개발을 지원할 수 있게 몇몇 대기업이 지원하는 새로운 이니셔티브도 생겼습니다.

요컨대, PHP core 개발 자금을 지원하는 유일한 목표를 가진 비영리 PHP Foundation이 있습니다. 이 이니셔티브는 이미 프로젝트에 10만 달러를 약속한 JetBrains가 주도합니다. 다른 많은 사람들과 함께 이제 $329,920.75를 모았습니다. 좋은 시작!

  • 이 글을 번역하는 시점에는 $386,384.93 USD, 연간 추정 예산은 $468,509.68 USD입니다.

JetBrains의 블로그 게시물에서 재단의 사명과 목표에 대해 자세히 알아볼 수 있습니다 .

The ecosystem

Packagist는 이제 300만 개 이상의 등록된 버전과 300,000개 이상의 패키지가 있습니다. 보시다시피 생태계는 계속 성장하고 성장하며 2022년에도 다르지 않을 것입니다.

Packagist에 등록된 패키지 현황 그래프

최근에 Packagist는 500억 회 이상의 설치(install)를 처리하는 이정표를 통과했습니다.
축하해요 Packagist!

Async PHP

Async 커뮤니티의 흥미로운 개발 중 하나는 Amp와 ReactPHP의 개발자가 함께 모여 Revolt PHP라는 fiber 호환 이벤트 루프 구현을 만들었다는 것 입니다.

Serverless PHP

Matthieu Napoli는 PHP 개발자에게 이 비교적 새로운 PHP 사용 방법에 대해 교육하는 것을 그의 사명으로 삼고 있으며 꽤 잘하고 있는 것 같습니다. 서버리스 PHP를 쉽게 만들기 위한 그의 오픈 소스 프로젝트인 Bref를 확인 하거나 2022년 서버리스 PHP에 대한 그의 visual course을 확인할 수 있습니다.

Heaps explained in PHP

https://doeken.org/blog/heaps-explained-in-php

PHP에서 heap을 사용하는 방식을 보여줍니다.
🤷 힙은 언제 유용합니까?

  • 가장 높은(또는 가장 낮은) 값에 직접 액세스
  • 많은 삽입 및 제거 작업
  • 배열 정렬
  • 우선 순위 대기열

이를 훌륭하게 구현한 Real world example은 revolt/event-loop package에서 찾을 수 있습니다.

이 글을 읽기 위해 Tree에 대한 약간의 지식은 유용하기 때문에 Trees and Tree Traversal in PHP를 먼저 읽는 것이 좋습니다 .

Implementation of Chain of Responsibility Design Pattern in PHP

https://orangesoft.co/blog/chain-of-responsibility-design-pattern-in-php

PHP에서 Chain of Responsibility 디자인 패턴 구현

             Chain of Responsibility:
+-------------------------------------------+
+-------+ | +---------+ +---------+ +---------+ | +--------+
| Input | -> | | Handler | -> | Handler | -> | Handler | | -> | Output |
+-------+ | +---------+ +---------+ +---------+ | +--------+
+-------------------------------------------+

async & await at the edge with ReactPHP

https://blog.wyrihaximus.net/2021/12/async-and-await-at-the-edge-with-reactphp/

Fiber를 지원하는 PHP 8.1이 출시되었습니다! ReactPHP maintainer 중 한 명이 사용 방법에 대해 씁니다.

PHP Benchmark: include() vs file_get_contents()

https://konstantin.blog/2021/php-benchmark-include-vs-file_get_contents/

Opcache 설정을 조정하면 include()가 file_get_contents()보다 빠를 수 있습니다.

Where does my validation live?

https://blog.frankdejonge.nl/where-does-validation-live/

유효성 검증을 어느 레이어(Controller Layer, Service Layer, Domain Layer)에 넣어야 할지, 각각 어느 점이 좋은지 설명합니다.

  • Controller validation: shapes and types
  • Service validation: from types to concepts concepts
  • Domain Layer: guarding invariants

How to build maintainable PHP applications

https://blog.ecotone.tech/how-to-build-maintainable-php-applications/

유지 관리 가능한 PHP 애플리케이션을 구축하고 프레임워크에서 비즈니스 로직을 분리하는 방법.

Making sense of the 8 log levels in PHP

https://darkghosthunter.medium.com/php-making-sense-of-the-8-log-levels-ddd27c4719a

여덟 레벨을 모두 설명하는데 저자 자신은 4개만 쓴다고 합니다.

  • Debug(디버그): 앱의 내부 작동을 보여주는 모든 것.
  • Error(오류): 발생해서는 안 되는 일이 발생했습니다.
  • Alert(경고): 단기적으로 앱 상태를 위험에 빠뜨리는 모든 것.
  • Emergency(긴급 상황): 응용 프로그램의 모든 부분이 작동을 멈췄습니다.

Overriding vendor classes

https://downing.tech/posts/overriding-vendor-classes

포크를 생성하지 않으려면 composer.json에서 autoloading을 적절하게 구성할 수 있습니다. 또는 옵션으로 cweagans/composer-patches와 함께 패치를 사용할 수도 있습니다.

Accessing private properties in PHP

https://www.lambda-out-loud.com/posts/accessing-private-properties-php/

Closure::bind를 통한 리플렉션 및 액세스 대신 객체를 배열로 캐스팅할 수 있습니다(하지만 그래야 할까요?).

@AllaertPatrick의 트윗

https://twitter.com/AllaertPatrick/status/1478323931924860928

때때로 코드에서 무슨 일이 일어나고 있는지 이해하기 위해 생성된 opcode를 살펴보는 것이 유용할 수 있습니다. phpdbg -p* file.php 명령이 도움이 될 것입니다.

AllaertPatrick에서 공유된 이미지

Community

PHP in 7 minutes

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

Brent Roose의 영상.

What kind of language is PHP in 2022? Find out in 7 minutes!

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2021년 10월호의 번역/해석본입니다.

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


PHP 8.1 RC3이 출시 되었습니다. 열거형(enumeration)을 사용하는 첫 패키지도 이미 사용할 수 있습니다.

Magento의 커뮤니티 포크가 발표되었습니다.

PSR 외에도 PER이라는 새로운 유형의 권장 사항이 있습니다.

Symfony 6은 가능한 모든 곳에 타입을 선언합니다. 업데이트 방법은 무엇입니까?

PHP 8.2에서는 최적화된 새로운 데이터 구조와 독립형(standalone) null 타입이 제안되었습니다.

실제로는 취약점이 아니긴 하지만, disable_functions과 관련된 PHP 취약점이 게시되었습니다.

⚡️ News

PHP 8.1 RC 3

세 번째 릴리스 후보가 예정대로 발표되었습니다. PHP 8.1의 새로운 기능에 대한 개요는 What’s new in PHP 8.1 그리고 PHP 8.1: before and after 게시글을 참조하세요. 전체 변경 목록은 PHP.Watch에서 확인할 수 있습니다.

이제 PHP 8.1용 마이그레이션 가이드도 나왔습니다.

Mac에서 homebrew를 통해 php:8.1-rc-cli와 같은 이미지를 docker로 시도해보거나 그냥 3v4l.org를 둘러볼 수도 있습니다.

열거형(enumeration)을 사용하는 첫 패키지도 이미 사용할 수 있습니다.
alexanderpas/php-http-enum는 HTTP 응답 메시지의 상태 코드 및 텍스트가 포함된 열거형입니다.

PHP 8.0.11, 7.4.24 and 7.3.31

https://www.php.net/ChangeLog-8.php#8.0.11
https://www.php.net/ChangeLog-7.php#7.4.24
https://www.php.net/ChangeLog-7.php#7.3.31

보안 취약점 CVE-2021-21706 수정을 지원하는 업데이트.

이 수정 사항은 ZipArchive::extractTo가 Windows에서 특정 파일 경로 이름으로 대상 디렉토리 외부에 zip 아카이브를 추출하게 하는 버그를 해결합니다.

The Future of Magento

https://www.mage-os.community/blog/the-future-of-magento

Magento 커뮤니티 구성원의 이 편지는 커뮤니티 조직에서 운영하는 Magento 포크가 있을 것이라고 발표했습니다. 목표는 Magento의 장기적인 오픈 소스 수명을 보장하는 것입니다.

이전에 Adobe가 Magento를 마이크로서비스로 분해할 계획이라고 발표했습니다. 이것이 정확히 어떻게 일어날지는 불분명합니다. 이것이 포크가 생성되는 이유입니다. 후자가 열려 있는 한 Adobe의 Magento와 호환됩니다.

PhpStorm 2021.3 Early Access Program Is Open

https://blog.jetbrains.com/phpstorm/2021/09/phpstorm-2021-3-early-access-program-is-open/

PhpStorm 2021.3 Early Access 프로그램이 한창 진행 중입니다. 매주 JetBrains에서는 공식 릴리스 전에 새로운 기능을 사용해 볼 수 있는 새로운 빌드를 게시합니다.

다가오는 주요 릴리스에는 PHP 8.1에 대한 완전한 지원, 제네릭에 대한 많은 개선 사항, 배포를 위한 새로운 옵션, 업데이트된 디버거 인터페이스 등이 포함될 것입니다.

PER Workflow – PHP-FIG

https://www.php-fig.org/bylaws/per-workflow/

PHP-FIG는 PHP Evolving Recommendations의 아이디어를 승인했습니다. PSR 표준 외에도 영구적으로 변경 및 보완할 수 있는 권장 사항인 PER이 있습니다.
예를 들어 코드 스타일의 경우 새로운 언어 기능을 반영하는 새로운 규칙을 추가할 수 있습니다.

“Vulnerability” (not) in PHP to bypass disable_functions

한 연구원이 최근 php.ini의 disable_functions 지시문에 의해 설정된 제약 조건을 우회하는 방법을 발표했습니다.

disable_functions를 사용하여 PHP 스크립트에서 특정 기능의 사용을 금지할 수 있습니다. 예를 들어 system, exec, proc_open 및 shell_exec가 외부 프로그램에 대한 호출을 차단하는 것을 금지할 수 있습니다.
(그건 그렇고, eval()은 함수가 아니라 언어 구조이기 때문에 금지할 수 없습니다.)

disable_functions는 보안 기능이 아니며 보안을 위해 그것에 의존하는 것은 나쁜 생각이기 때문에 우회 문제는 취약점이라고 할 수 없습니다.

이게 PHP의 보안 문제가 맞다고 하는 글에 Nikita Popov(aka nikic)가 reddit에 댓글을 남겼습니다.
많은 스크립트 언어들처럼 PHP 구현이 임의의 공격자가 제어하는 코드를 안정적으로 샌드박싱하는 것이 주요 목표는 아니며, 보안 문제인지 여부는 위협 모델(threat model)에 따라 판단할 수 있는데 서버에 올라간 PHP 프로젝트에 관한 한 원격 공격자를 위협 모델로 상정한다고 합니다. 아래 내용에서 정확한 표현으로 확인하세요.

Whether something is a security issue depends on your threat model. As far as the PHP upstream project is concerned, our threat model is a remote attacker. We consider the case where the attacker has ability to execute arbitrary PHP code on the server a lost cause.

Of course, for a shared hosting provider that does not use any OS-level separation between clients, this is a security issue. As far as the PHP project is concerned, this is a fundamentally insecure deployment method. You may use it at your own risk.

This is a matter of practicality, because the PHP implementation is very far removed from reliably sandboxing arbitrary attacker-controlled code. There are some languages that have this as a hard design constraint (the most important being JavaScript), but for other scripting languages this is not a primary goal (definitely not for PHP, and I would strongly suspect not for Python or Ruby either, though I’m not sure on that count).

If we wanted to move in that direction, the first step would be to promote all remaining engine notices/warnings to exceptions, because there is a large class of interrupt vulnerabilities caused by them (to the point that addressing other issues would be somewhat “pointless” from a security perspective). One of my bigger regrets for PHP 8.0 is that we did not make undefined variables an exception.

PHP에서 보안 문제로 간주되는 것과 그렇지 않은 것에 대해 자세히 알아보십시오: wiki.php.net/security.
이 문서에선 다음과 같은 문제가 보안 문제 버그로 분류됩니다.

  • 사용자가 승인되지 않은 작업을 실행할 수 있도록 허용하거나
  • 보안 경계를 넘거나
  • 액세스할 수 없는 데이터에 액세스하거나
  • 시스템의 접근성 또는 성능에 심각한 영향을 미치는 경우

그리고 문제를 더 자세히 이해하는 데 관심이 있다면 disable_functions가 작동하는 방식과 그렇게 악용하는 방식(메모리 손상을 통한 우회)에 대한 멋진 분석이 있습니다. 그리고 다른 하나는 이러한 문제를 자동으로 검색하는 방법을 설명합니다.

또한, 인기 있는 Laravel 프로젝트인 fiveai/Cachet에서 발견된 실제 RCE(Remote Code Execution) 취약점 분석을 확인하십시오: Laravel Configuration Injection을 통한 코드 실행.

composer/composer 2.1.9

https://github.com/composer/composer/releases/tag/2.1.9

이 업데이트는 Windows의 취약점을 수정합니다(CVE-2021-41116). Windows 사용자는 반드시 업데이트해야 합니다.

PHPOpenDocs.com

https://phpopendocs.com/about

PHP 관련 콘텐츠를 위한 커뮤니티 사이트를 만드는 실험입니다.

PHP 버전별로 그룹화된 기여자 목록이 있는 유용한 후원 페이지와 PHP 코드 구조 및 PHP 코어에 기여를 시작하는 방법에 대한 리소스에 대한 많은 링크가 있는 Internals 섹션이 이미 있습니다.

🐘 PHP Internals

New data structures in PHP

PHP는 list, 연관 배열, 큐, 스택 등으로 사용할 수 있는 범용 배열 데이터 구조를 가지고 있습니다.

이 다재다능함은 사실은 해시 테이블을 사용하여 달성됩니다. 그러나 이 다재다능함은 추가 메모리 사용량과 미묘한 성능 오버헤드를 대가로 합니다.

SPL(Standard PHP Library)은 보다 전문화된 데이터 구조를 가지고 있지만 그 자체로 무거운 감이 있습니다.

Tyson Andre는 PHP에 최적화된 새로운 데이터 구조를 추가할 것을 제안합니다.

이를 달성하기 위한 한 가지 옵션은 널리 사용되는 php-ds/ext-ds 확장에서 구조를 추가하는 것이지만 작성자는 이 아이디어를 지지하지는 않습니다. GitHub의 이 스레드는 토론의 세부 사항에 대한 정보를 제공합니다.

현재로서는 두 개의 RFC가 있습니다. 이러한 구조 및 기타 구조의 구현은 TysonAndre/pecl-teds 확장에서 사용할 수 있습니다.

[RFC] final class Vector

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

벡터 구조 – 연속된 인덱스 0, 1, 2 등의 요소 집합입니다. 현재 배열보다 절반의 메모리가 필요하고 유사한 SPL 구조보다 빠르게 작동합니다.

API의 관점에서 보면, 이것은 ArrayAccess, IteratorAggregate 및 Countable 인터페이스를 가진 클래스입니다. RFC에는 아래와 같은 식의 final class를 추가하자는 내용이 나옵니다.

final class Vector implements IteratorAggregate, Countable, JsonSerializable, ArrayAccess
{
...

ArrayAccess처럼 사용할 수도 있죠.

$values = new Vector();
for ($i = 0; $i < $n; $i++) {
$values[] = $i;
}

[RFC] final class Deque

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

Deque는 양방향 큐(doubly-linked queue)입니다. 즉, 시작과 끝에서 요소를 추가 및 제거할 수 있습니다. SplQueueue 또는 SplDoublyLinkedList 대신 사용하면 성능 및 메모리 소비가 즉시 개선되는 것을 볼 수 있습니다.

Deque는 메모리 관리에 대한 알려진 문제로 인해 대형 어레이를 사용하는 장기 실행 애플리케이션에 사용하기에도 적절합니다.

[RFC] Allow null as standalone type

https://wiki.php.net/rfc/null-standalone-type

George Peter Banyard는 타입 선언에서 null을 사용하는 기능을 추가할 것을 제안합니다.

첫째, 이것은 PHP의 타입 시스템의 완전성에 대한 누락된 부분입니다. mixed 타입과 never 타입이 추가됐고, union과 intersection이 있지만 unit 타입은 누락되었습니다.

둘째, 이 타입은 타입 힌트에 대한 일부 엣지 케이스를 다루고 정적 분석을 개선합니다.
예를 들어 현재로서는 유사타입(pseudotype)인 false를 union에서 사용할 수 있지만 함수가 false|null을 반환하도록 지정할 수는 없으며 bool|null만 반환할 수 있습니다.

How opcache works

https://www.npopov.com/2021/10/13/How-opcache-works.html

Nikita Popov는 항상 블로그 게시물을 작성하지는 않지만, 블로그 게시물을 작성할 때는 개념을 명확하고 자세하게 설명합니다.

🛠 Tools

Xdebug 3.1.0

https://xdebug.org/announcements/2021-10-04

인기 있는 PHP 디버거가 업데이트되었습니다. PHP 8.1, 많은 수정 사항 및 약간의 사소한 기능에 대한 지원이 함께 제공됩니다. 이 확장 프로그램 개발자인 Derick Rethans의 Xdebug 3에 대한 이 비디오 시리즈를 놓치지 마십시오.

spiral/roadrunner 2.4

https://github.com/spiral/roadrunner

Golang으로 작성된 PHP 애플리케이션 서버의 대규모 업데이트입니다. 이 릴리스에는 대기열(queue), 키-값 저장소 및 Temporal(분산형 오케스트레이션 도구)과의 통합에 대한 지원이 포함됩니다. 더 자세히 보려면 여기로.

brick/date-time

https://github.com/brick/date-time

날짜 및 시간 작업을 위한 immutable 클래스 집합입니다.

php-runtime/runtime

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

Runtime 컴포넌트는 애플리케이션 부트스트랩 로직을 전역 상태와 분리하므로 PHP-FPM, ReactPHP, Swoole 등과 같은 환경에서 아무 변경 없이도 애플리케이션을 실행할 수 있습니다.

원래 Symfony의 구성 요소였으나, 이제는 GitHub에서 별도의 조직(organization)이 될 정도로 훌륭하다고 여겨집니다.

rindow/rindow-neuralnetworks

https://github.com/rindow/rindow-neuralnetworks

Python Keras를 기반으로 하는 신경망 교육 프레임워크입니다. 해당 문서에 따르면 GPU 지원은 실험 모드 및 Windows에서만 사용할 수 있습니다.

piko-framework/router

https://github.com/piko-framework/router

또 다른 PHP 라우터인 이 라우터는 기수 트리(radix tree)를 기반으로 하며 벤치마크에 따르면 Symfony 라우터보다 빠릅니다.

nunomaduro/termwind

https://github.com/nunomaduro/termwind

Tailwind CSS 스타일 구문으로 콘솔 프로그램의 출력 형식을 지정하기 위한 PHP 8+ 패키지입니다.

icanhazstring/random-issue-picker

https://github.com/icanhazstring/random-issue-picker

Hacktoberfest에 참여하고 싶지만 어디서부터 시작해야 할지 모르겠다면 GitHub 또는 GitLab에서 무작위 문제를 선택하는 도구가 있습니다.

Symfony

Preparing your applications and bundles for Symfony 6

https://symfony.com/blog/preparing-your-apps-and-bundles-for-symfony-6

Symfony 5.4 및 6.0은 11월에 출시될 예정입니다. 차이점은 Symfony 5.4에는 더 이상 사용되지 않는 기능이 모두 포함되지만 Symfony 6.0에서는 모두 제거된다는 것입니다. 또한 Symfony 5.4 및 6.0 모두 가능한 경우 모든 메서드 속성, 인수 및 반환 값에 PHP 유형 선언이 추가됩니다.

Symfony 구성 요소를 사용하는 앱을 업데이트하는 방법을 알아보려면 Symfony Core 팀 구성원이 작성한 이 자세한 게시물을 확인하세요. Symfony 6: PHP 8 Native Types & Why We Need YOU.

you will no longer need flex.symfony.com

https://symfony.com/blog/symfony-flex-is-going-serverless

Symfony Flex의 경우 더 이상 flex.symfony.com이 필요하지 않습니다. 모든 레시피는 이제 github.com/symfony/recipes에 있습니다.

A week of Symfony #771 (4-10 October 2021)

https://symfony.com/blog/a-week-of-symfony-771-4-10-october-2021

Laravel

Working with fixture data in your tests.

https://dyrynda.com.au/blog/working-with-test-fixtures

정적 테스트 fixture를 다루는 방법을 이야기 합니다.

Strategies for decreasing the number of queries in a Laravel app.

https://freek.dev/2075-strategies-for-decreasing-the-number-of-queries-in-a-laravel-app

Laravel 앱에서 쿼리 수를 줄이기 위한 전략을 소개합니다.

📺 Laravel Worldwide Meetup #10:

A Little Bit of AWS Lambda, and Pest to Perfection.

📺 Converting a PHPUnit testsuite to Pest

https://www.youtube.com/watch?v=81-r9THrJhI

📺 Let’s Build an Online Store – A nice series of streams.

https://www.youtube.com/watch?v=-0C04evVV9A&list=PLKJBt7aeK3k8Ry6aNd4wUOvfXtlnQh5-O&index=1&t=5s

💡 기타 읽을 만한 글

The Road to PHP: Static Analysis

https://road-to-php.com/static

정적 분석에 대한 Brent Roose의 10일 뉴스레터입니다.

Testing tips from Matthias Noback:

One Class, One Test?

https://matthiasnoback.nl/2021/09/quick-testing-tips-one-test-per-class/

테스트가 없던 시절로 돌아가는 건 싫고, 실행하기 쉬운 규칙을 만들어 생각없이 테스트를 추가하는 게 정말 도움이 되겠느냐는 글.

Testing Anything; Better Than Testing Nothing?

https://matthiasnoback.nl/2021/09/testing-anything-better-than-testing-nothing/

없는 것보다는 나으니 아무거나 테스트하려는 사람들을 말리며, 테스트를 작성하지 말고 좋은 테스트를 작성하라고 합니다. 그렇게 하는 동안 테스트 작성이 재미있고 쉽고 효과적인지 확인하라고 하네요. 켄트백은 “테스트는 두려움을 지루함으로 변화시켜주는 프로그래머의 돌이다.”라고 했는데 말이죠…

어쨌든 이를 위해 다음에 투자해야 한다고 합니다.

  • 특정 테스트를 매우 빠르게 실행하는 데 도움이 되는 테스트 도구
  • 빠른 결과를 제공하는 테스트
  • 다른 데이터가 제공될 때 코드가 어떻게 동작하는지 보여주기 위해 더 많은 테스트 케이스를 추가하는 것은 정말 저렴해야 합니다.

이런 게 “클래스 하나에 테스트 하나” 규칙이나 request 날리고 DB 확인하는 테스트(make-request-then-look-in-DB)보다는 나을 거라고 합니다.

Write Unit Tests Like Scenarios

https://matthiasnoback.nl/2021/09/write-unit-tests-like-scenarios/

읽기 좋은 테스트를 위해 시나리오를 작성하듯 코드를 작성하라는 조언입니다.
예시로 저자는 Give/When/Then 스타일로 작성합니다. naming 규칙에도 신경써야 하며 더 높은 추상화 수준에서 “왜”에 집중하며(해당 동작의 이유) 테스트를 작성하길 원합니다.

What happens when we clone objects?

https://doeken.org/blog/what-happens-when-we-clone

clone을 사용하면 어떤 일이 벌어질까?

Either data structure.

https://marcosh.github.io/post/2021/09/24/either-why-or-how.html

Either 단일 데이터 유형/클래스에서 무언가가 두 가지 중 하나일 수 있다는 사실을 설명할 수 있는 데이터 구조입니다.
이를 구현하는 예제를 Haskell과 PHP로 구현합니다.

creating an Option type in PHP

https://ryangjchandler.co.uk/posts/creating-an-option-type-in-php

PHP에 Option 추가하기.

null이나 nil 개념이 없는 Rust의 Option에서 아이디어를 얻어 Option type을 만드는 과정을 보여줍니다. PHP 8.0 이상.

Generic 지원은 PHPStan의 지원을 받습니다.

현재 PHP의 enum으로는 구현이 완벽하진 않고, RFC: Tagged Unions가 도입된다면 좀 더 Rust의 Option에 가까운 구현을 할 수 있다고 합니다…만, PHP 8.1을 목표로 한 RFC는 이 글을 번역하는 시점에 Draft 상태로 남아있습니다.

The €13.000 Video Course Launch That Made Me Believe In Myself Again

https://christoph-rumpel.com/2021/9/the-video-course-launch-that-made-me-belive-in-myself-again

Christoph Rumpel이 어떻게 masteringphpstorm.com 코스를 시작했는지에 대한 몇 가지 세부 정보를 공유합니다.

Generative art with PHP

https://www.binarymoon.co.uk/2021/09/creating-generative-art-with-php/

Ben Gillbanks는 코드를 사용하여 간단한 아바타에서 픽셀 아트 도시에 이르기까지 이미지를 만드는 방법을 설명합니다.

픽셀 아트 도시 이미지

A game on FFI: quasilyte/kphp-game

https://github.com/quasilyte/kphp-game

KPHP는 PHP 컴파일러입니다. PHP의 제한된 하위 집합을 PHP보다 빠르게 실행되는 기본 바이너리로 컴파일합니다.

KPHP 팀의 사람들은 FFI에 대한 실험적 지원을 구현하고 데모로 FFI를 사용하여 작은 게임을 만들었습니다.

놀랍게도 KPHP-FFI는 기존 PHP의 FFI와 호환되므로 일반 PHP 7.4 이상에서도 게임을 실행할 수 있습니다.

PHP의 FFI에 대한 완전한 가이드(Complete guide to FFI in PHP)에서 다른 FFI 응용 프로그램에 대해 자세히 읽어보십시오.

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2021년 9월호의 번역/해석본입니다.

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


PHP 8.1이 첫 번째 release candidate에 도달했으며(RC 1) 변경 사항 목록이 확정되었습니다. 11월 말에 예정된 최종 릴리스 전에 최소 5개의 릴리스 후보가 더 있을 것입니다.

한편, PHP 8.2에 대한 세 가지 추가 제안(연산자 오버로딩, $this type hint, 동적 속성 지원 중단)과 관련하여 PHP 내부에서 이미 논의가 진행 중입니다.

malware composer 패키지를 조심하십시오! 그 중 2개는 최근 Packagist에서 발견되었습니다.

PHP-FIG는 PSR에 새로운 유형의 표준을 추가하는 방법에 대해 설명합니다.

⚡️ News

PHP 8.1.0 RC 1

https://www.php.net/archive/2021.php#2021-09-02-1

최종 릴리스는 아직 2개월 반이 남았으며 최소 5개의 릴리스 후보가 더 나옵니다.

8.1 버전의 최종 릴리스는 아직 2개월 반 남았으며 최소 5개의 릴리스 후보가 더 남아 있습니다. 여기 Homebrew로 macOS에 PHP 8.1을 설치하는 방법에 대한 간단한 튜토리얼도 있습니다. 또한 PHP 8.1에는 이미 만들어진 Docker 이미지도 있습니다.

PHP 8.1에 대한 포괄적인 설명은 php.watch/versions/8.1 및 Brent Rooses의 블로그인 stitcher.io/blog/new-in-php-81에서 찾을 수 있습니다.

PHP 8.0.10, PHP 7.4.23, PHP 7.3.30

https://www.php.net/ChangeLog-8.php#8.0.10
https://www.php.net/ChangeLog-7.php#7.4.23
https://www.php.net/ChangeLog-7.php#7.3.30

The end of Swiftmailer

https://symfony.com/blog/the-end-of-swiftmailer

인기 있는 메일 패키지 Swiftmailer는 11월까지만 지원됩니다. Swiftmailer의 차세대 버전이라 할 수 있는 symfony/mailer로 대체할 수 있습니다.

Symfony/mailer의 기능과 개념은 Swiftmailer와 동일하므로 마이그레이션이 상당히 쉬울 것입니다(DSN format 등 일부 다른 점이 존재합니다).
Rector에는 마이그레이션 스크립트가 있으며 클래스 이름만 변경하면 됩니다.

PHP Evolving Recommendations (PERs)

https://github.com/php-fig/fig-standards/pull/1235

PHP-FIG는 현재 PSP 표준만 출시합니다. 문제는 일부 표준에는 지속적인 개선이 필요하다는 것입니다. 예를 들어 코드 스타일의 경우 PSR-12가 PSR-2를 대체했으며 이제 PHP 7.4-8.0의 새로운 기능이 포함되지 않습니다.

이제 시간이 지남에 따라 변경될 수 있는 PER이라는 특별한 유형의 권장 사항을 채택하자는 제안이 있습니다.

Malware Composer packages

Packagist에는 symfony/process와 똑같은 일을 하는 symfont/process라는 패키지가 있었는데, 머신에 대한 정보를 수집하여 제3자에게 보내고 웹 쉘을 열었습니다.

공격자는 사용자가 설치 중에 패키지 이름의 철자를 틀리고 symfony 대신 symfont를 입력할 가능성이 있다고 예상했습니다.

맬웨어 패키지는 이미 Packagist와 GitHub에서 제거되었으며 작동 방식에 대한 분석을 확인할 수 있습니다.

또 다른 백도어는 laraveli/qr-code 패키지에서 발견되었습니다. 코드에서 알 수 있듯이 멀웨어는 이러한 유형의 웹 셸을 시스템에 복사하고 있었습니다.

이러한 공격으로부터 자신을 보호하기 위해 CI 파이프라인에 local-php-security-checker를 추가하거나 the-php-security-checker GitHub Action을 사용할 수 있습니다.

더 복잡한 경우에는 marcocesarato/PHP-Antimalware-Scanner를 실행할 수 있습니다.

The hautelook/alice-bundle repository was removed from GitHub

https://packagist.org/packages/hautelook/alice-bundle

이 패키지는 800만 개 이상의 다운로드를 기록했으며 main contributor는 자신이 관리자 목록에서 제거되고 저장소가 비공개로 설정된 이유를 알지 못합니다.

nelmio/alice 이슈에서 Théo가 예상하는 원인이 나와있고, 여기 언급된 것처럼 Théo의 fork 버전인 theofidry/AliceBundle로 대체해서 사용할 수 있습니다.

🐘 PHP Internals

[RFC] Deprecate dynamic properties

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

현재 버전의 PHP에서는 존재하지 않는 속성에 쓰려고 하면 자동으로 생성됩니다.

현대(modern) 코드에서 존재하지 않는 속성에 쓰는 일은 의도적으로 수행되는 경우가 거의 없으며 대개 실수입니다.

이 RFC는 동적(선언되지 않은) 속성을 만드는 기능을 더 이상 사용하지 않고 제거할 것을 제안합니다.

class User {
public $name;
}

$user = new User;

// Assigns declared property User::$name.
$user->name = "foo";

// Oops, a typo:
$user->nane = "foo";

// PHP 8.2: Throws a warning but still creates a dynamic property.
// PHP 9.0: Throws Error exception.

이 변경 사항은 stdClass 및 해당 상속자에는 적용되지 않습니다. magic method __get/__set의 동작도 이 변경의 영향을 받지 않습니다.

$obj = (object) []; // = new stdClass;

// No deprecation warning
$obj->foo = 1;

class myStdClass extends stdClass {}
$obj2 = new myStdClass;

// No deprecation warning
$obj2->bar = 1;

PHP 9.0의 이러한 변경으로 (더 이상 properties 멤버를 저장하지 않아도 되므로) 객체의 크기를 8바이트 줄일 수 있습니다. 물론 단일 객체의 경우 이것은 아무것도 아닙니다. 그러나 대규모 응용 프로그램의 경우 누적하면 눈에 띄는 차이가 발생할 수 있습니다.

stdClass의 별칭을 DynamicObject로 지정하는 것이 타당한지에 대한 논의도 있습니다.

[RFC] User Defined Operator Overloads

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

이 RFC에서 Jordan LeDoux는 기본적으로 각 연산자에 대해 서로 다른 magic method를 정의할 것을 제안합니다. 예를 들어 +의 경우 __add() 또는 ==의 경우 __equals().

이러한 방법을 사용하면 개체에 적용되는 연산자의 원하는 동작을 설명할 수 있습니다.

$a = new Number(8);
$b = new Number(6);
$c = new Number(4);

// Instead of this
$posRoot = $b->mul(-1)->add($b->pow(2)->sub($a->mul($c)->mul(4))->sqrt())->div($a->mul(2));

// It would be possible do it like this
$posRoot = ((-1 * $b) + ($b ** 2 - 4 * $a * $c)->sqrt()) / (2 * $a);

제안이 수락되면 사용자 영역 코드에서 스칼라 객체의 동작을 구현하는 것이 가능해집니다.

[RFC] $this return type

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

Nikita는 $this를 반환 값 유형으로 사용하는 아이디어를 제시했습니다. 이로 인해 인터프리터는 객체가 반환된 객체와 동일한지 확인합니다.

다음은 Ben Ramsey의 self 및 static과 비교하는 방법입니다.

  • self – 반환 값은 이 type 선언을 설정하는 동일한 클래스의 인스턴스여야 합니다.
  • static – 반환 값은 이 type 선언으로 메서드를 호출하는 동일한 클래스의 인스턴스여야 합니다.
  • $this – 반환 값은 이 type 선언으로 메서드를 호출하는 인스턴스와 동일한 인스턴스여야 합니다.
class Test {
public function method(): $this {
return $this;
}

public function not_this(): $this {
return new self(); // Fatal Error
}
}

$this type은 static의 subtype입니다. 따라서 하위클래스에서 static type을 $this로 제한하는 것은 가능합니다. 그 반대는 불가능.

class A {
public function method1(): static {}
public function method2(): $this {}
}

class B extends A {
// This override is legal.
public function method1(): $this {}

// This override is illegal.
public function method2(): static {}
}

[RFC] Deprecate partially supported callables

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

다음 콜러블은 현재 콜러블, is_callable() 함수 및 call_user_func()에서 허용되지만 $callable()에서는 지원되지 않습니다.

"self::method"
"parent::method"
"static::method"
["self", "method"]
["parent", "method"]
["static", "method"]
["Foo", "Bar::method"]
[new Foo, "Bar::method"]

이 RFC는 PHP 8.2에서 deprecate되며 PHP 9.0에서 이 callable에 대한 지원을 제거할 것을 제안합니다.

“function”, “Foo::method”, [“Foo”, “method”] 또는 [new Foo, “method”]와 같은 일반적인 호출 가능 항목은 이 제안의 영향을 받지 않습니다. 중괄호로 호출하면 예상대로 작동합니다:

class Foo {
function method() {
echo 'method';
}
}
[new Foo, "method"]();
// > method

All PHP RFCs on GitHub

https://github.com/ramsey/php-rfcs

실험으로, PHP 8.1 릴리스 관리자인 Ben Ramsey는 지금까지 논의된 모든 838개 RFC를 각각의 변경 내역과 함께 Git으로 내보냈습니다.

🛠 Tools

whsv26/functional

https://github.com/whsv26/functional

저자는 컬렉션의 기존 PHP 구현에 문제가 있어 자신이 직접 패키지를 작성했습니다.

저자가 reddit에 올린 글에 의하면 type safe하고 map, filter, reduce와 같은 연산 체인에 유용합니다.

phabelio/phabel

https://github.com/phabelio/phabel

이 PHP용 변환기를 사용하면 이전 환경에서 또는 이전 버전과의 호환성을 유지해야 하는 경우 최신 PHP 버전의 기능을 사용할 수 있습니다. async/await 키워드와 같이 아직 존재하지 않는 기능에 대한 지원을 추가할 수도 있습니다.

marcioAlmada/yay 또는 preprocess.io와 같은 유사한 도구가 이미 존재합니다. 그리고 Rector는 백포트도 할 수 있습니다. 그러나 Phabel의 특별한 점은 Composer와의 쉬운(transparent) 통합입니다.

phparkitect/arkitect

https://github.com/phparkitect/arkitect

프로젝트의 아키텍처 규칙을 정의하고 확인하기 위한 도구입니다.

niklongstone/regex-reverse

https://github.com/niklongstone/regex-reverse

주어진 정규식을 만족하는 임의의 문자열을 생성합니다.

azjezz/psl

https://github.com/azjezz/psl

hhvm/hsl에 영감을 받은 표준 PHP 라이브러리입니다.

Psl의 목표는 PHP 프로그래머를 위해 일관되고 중앙 집중식이며 형식이 잘 지정된 API 세트를 제공하는 것입니다.

github-php/sponsors

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

GitHub 스폰서 API 작업을 위한 패키지입니다. 후원자 여부를 확인하여 접근통제를 구성할 수 있습니다.

koriym/Koriym.Attributes

https://github.com/koriym/Koriym.Attributes

단일 인터페이스를 통해 PHPDoc 주석 및 PHP 8 속성을 읽을 수 있는 간단한 도구입니다. 동일한 작업에 더욱 발전된 spiral/attributes도 사용할 수 있습니다.

grep.app

https://grep.app/

GitHub에서 빠른 코드 검색을 위한 편리한 도구입니다.

mrsuh/php-generics

https://github.com/mrsuh/php-generics

PHP로 작성된 PHP 제네릭. 이것은 PHP에서 구문 수준 제네릭을 구현하려는 흥미롭고 기능적인 시도입니다.

Symfony

kafkiansky/symfony-middleware

https://github.com/kafkiansky/symfony-middleware

Symfony용 PSR-15 호환 미들웨어.

lexik/LexikTranslationBundle

https://github.com/lexik/LexikTranslationBundle

번역 파일 내용을 데이터베이스로 import/export하고 번역을 편집하기 위한 GUI를 제공합니다.

Helpers for testing your applications based on Symfony components

Symfony 구성 요소를 기반으로 하는 애플리케이션 테스트를 위한 도우미

Symfony Messenger in microservices

https://medium.com/@dmitrii_tarasov/symfony-messenger-in-microservices-message-contracts-and-resilience-b9cc1a95fcf9

메시지 계약 및 탄력성 – 마이크로서비스 및 비동기식 통신에 대한 흥미로운 글입니다.

Ultimate Guide to Symfony Components

https://alex-daubois.medium.com/ultimate-guide-to-symfony-components-2021-7ac9908f8aa2

Symfony Component에 대한 궁극의 가이드. 당신의 프로젝트에서 어떤 component를 왜 써야 하는가.

How to dynamically validate some data with Symfony Validator.

https://jolicode.com/blog/how-to-dynamically-validate-some-data-with-symfony-validator

Symfony Validator로 일부 데이터를 동적으로 검증하는 방법.

Symfony plugin for PhpStorm has just got support for PHP8 Doctrine metadata attributes.

https://twitter.com/BigHaehnchen/status/1436029166403702786

Symfony plugin for PhpStorm이 PHP8 Doctrine metadata 속성을 지원한다는 소식.

Laravel

State of Laravel 2021 survey results

https://stateoflaravel.com/

4,500명의 개발자가 참여한 설문 조사 결과입니다. Laravel Daily에서 비디오 리뷰도 볼 수 있습니다.

lepikhinb/laravel-fluent

https://github.com/lepikhinb/laravel-fluent

이 패키지는 모델 속성을 정의하는 풍부한 표현 방법을 제공합니다. 런타임에 자동으로 형변환을 빌드하고 모델 속성에 기본 type에 따라 자동 완성을 추가합니다.

Creating a RoadRunner plugin for Laravel Octane

https://medium.com/@SlyFireFox/laravel-octane-build-your-first-plugin-for-roadrunner-d8906f0f5926

Go로 만들어진 PHP 어플리케이션 서버인 RoadRunner를 위한 플러그인을 만들어봅니다.

📺 Testing Laravel

https://testing-laravel.com/

Spatie의 유료 테스트 교육. 무료 에피소드도 있습니다 : Testing Middleware,
Cool Laravel Testing Techniques, and Testing a Form.

📺 The Queue Component in Laravel

https://www.youtube.com/watch?v=m-hNL87-lFo&list=PLcjapmjyX17hJZ-shzRMxTus0aMw0EVVB&index=8&t=25s

이제 막 시작하는 사람들을 위한 프레임워크에 대한 비디오 시리즈입니다.

📺 Planning & Kickstarting the Laravel Application

https://www.youtube.com/watch?v=2RlbXNjhQkc&t=168s

Laravel 핵심 팀의 일원인 Mohamed Said의 흥미로운 스트림입니다. 스트림에서 그는 앱을 작성하고, 단계별로 왜 그렇게 하는지 설명합니다.

Christoph Rumpel은 다가오는 모든 스트림에 대한 알림을 받을 수 있는 멋진 웹사이트 larastreamers.com을 만들었습니다.

📺 PHP Roundtable: 10 Years Laravel

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

Taylor Otwell, Matt Stauffer, Eric Barnes가 함께 합니다.

Yii

Yii news 2021, issue 3

https://opencollective.com/yiisoft/updates/yii-news-2021-issue-3

💡 기타 읽을 만한 글

A couple of posts from Larry Garfield with helpful test-writing techniques

유용한 테스트 작성 기술이 포함된 Larry Garfield의 몇 가지 게시물:

Fun with PHPUnit Data Providers

  • Data Providers를 설명하면서 generator를 활용하면 얼마나 더 편해지는지 설명합니다.

Advanced PHPUnit shenanigans

  • Testdox를 활용해 테스트 결과를 단순히 점(.) 하나로 표현하지 않고 문장으로 메시지를 출력할 수 있습니다.
    /**
    * @dataProvider pythagorasProvider
    * @testdox The square of $a plus the square of $b is the square of $c.
    */
    public function validate_triangles(float $a, float $b, float $c): void
    {
    $this->assertSame($c * $c, $a * $a + $b * $b);
    }
  • Data provider에 callable을 전달해 동적 assertion을 만들 수 있습니다.
  • Custom assert 함수를 활용할 수도 있습니다.

Test tip from Matthias Noback: Write self-contained tests

https://matthiasnoback.nl/2021/09/quick-testing-tips-self-contained-tests/

Matthias Noback의 테스트 팁

On using PSR abstractions

https://matthiasnoback.nl/2021/08/on-using-psr-abstractions/

Matthias Noback은 코드를 PSR에 묶거나, 래퍼를 만들거나, 고유한 인터페이스를 작성하는 것이 더 나은지 여부에 대해 설명합니다. Brent Roose이 이에 대해 답변을 하기도 했습니다. 그는 FIG의 진정성과 노력에도 불구하고 그들이 존재하지 않는 문제를 해결하기 위해 노력하고 있다고 믿는다고까지 이야기 합니다. FIG는 목표를 이루었으니 이제 그만 완료 선언을 해야 한다고요.

Creating a public/private multi-monorepo for PHP projects

https://www.smashingmagazine.com/2021/08/public-private-multi-monorepo-php-projects/

PHP 패키지를 비공개로 유지하면서 개발 경험을 더 빠르게 만들기 위해 “다중 모노레포” 접근 방식을 사용하는 방법을 살펴봅니다. 이 솔루션은 PRO 플러그인 제작자에게 특히 유용할 수 있습니다.

All about match expressions from PHP 8.0

https://ryangjchandler.co.uk/posts/all-about-match-expressions

PHP 8.0에서 등장한 match 표현식 정리

📺 A couple of videos about Xdebug 3 from Derick Rethans

Profiling: Analysing Data
Activation and Triggers

🔈 Podcasts

devmode #89 – Should Craft CMS use Yii3 or Laravel? – CraftCMS is a commercial CMS based on Yii2. In this podcast, its developers discuss the Craft CMS ecosystem and its potential transition to Laravel.

PHP Internals News #94 – Nikita Popov discusses RFC Unwrap Reference After Foreach.

PHP Internals News #93Jordan LeDoux discusses the already revoked RFC Never For Parameter Types.

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2021년 8월호의 번역/해석본입니다.

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


PHP 8.1이 두 번째 베타 버전에 도달했으며 변경 사항 목록이 확정되었습니다. 결정이 필요한 것은 지금 투표 중인 Nullable Intersection types 뿐입니다.

한편, PHP internals에서는 이미 다음 릴리스의 기능에 대해 논의하고 있습니다. 2022년에 출시될 PHP 8.2의 처음 두 RFC에 대해 알아보려면 계속 읽어보시기 바랍니다.

PHP 8.1이 파이버를 갖게 됨에 따라 두 개의 인기 있는 PHP용 비동기 프레임워크가 힘을 합치고 공통의 추상화 위에서 함께 작업하기로 합의했습니다.

⚡️ News

PHP 8.1.0, Beta 2

https://www.php.net/archive/2021.php#2021-08-05-2

베타 릴리스는 PHP 8.1의 활발한 개발 단계가 끝났다는 신호이며, 이는 새로운 기능 및 변경 사항 목록이 최종적인 것으로 간주될 수 있음을 의미합니다(Nullable Intersection types 제외). 세 번째이자 마지막 베타 버전은 8월 19일 입니다.

Peter Kokot의 PHP 8.1 departures 이미지

PHP 8.1에는 어떤 기능이 추가될까요?
가장 주목할만한 변경 사항을 요약했습니다.

  • Enums (RFC).
  • First-class callables (RFC).
  • Readonly properties (RFC).
  • New operator in initializers (RFC).
  • Brand new never type for return values (RFC).
  • Fibers (RFC).
  • Final constants in classes (RFC).
  • Spread operator supporting string array keys (RFC).
  • Deprecation of implicit non-integer-compatible float to int conversions (RFC).
  • Deprecation of serializable interfaces (RFC).
  • Explicit octal notation with the 0o prefix (RFC).
  • Restricted usage of $GLOBALS (RFC).

더 자세히 알고 싶다면 PHP 8.1 “이전” 및 “이후” 예제를 훌륭히 모은 글을 확인하세요.

Brent Roose의 The Road to PHP 8.1이라는 10일짜리 뉴스레터도 있습니다.

모든 변경 사항에 대한 전체 설명은 PHP.Watch: php.watch/versions/8.1 에서 볼 수 있습니다 .

PHP.Watch에는 Directory Uploads in PHP 8.1라는 게시물도 있습니다 . PHP 8.1의 경우 $_FILES 배열에는 사용자의 디렉토리 구조 경로가 있는 full_path 섹션이 포함됩니다. 이것은 디렉토리 업로드를 지원하는 데 필요합니다.

ReactPHP and Amp join forces

PHP 8.1에 파이버가 추가되면서 비동기 PHP 코드가 조금 더 쉽고 예뻐졌습니다. 비동기 PHP용으로 널리 사용되는 두 라이브러리의 유지관리자들(maintainers)이 RevoltPHP 프로젝트를 발표했습니다. 그들은 공통의 이벤트 루프를 만들고 fiber 추상화를 공유하여 구현할 계획입니다.

Revolt PHP(@revoltphp)의 트윗

With Fiber in 8.1 a new age dawns for #PHP. @AsyncPHP and @ReactPHP are joining forces through @RevoltPHP collaborating on a shared event loop and Fiber abstraction. Stay tuned!

PhpStorm 2021.2 has been released

https://blog.jetbrains.com/phpstorm/2021/07/phpstorm-2021-2-release/

제네릭 지원, 열거형(enums), 배열 모양 및 이 릴리스에 도입된 기타 모든 것에 대한 모든 세부 정보가 포함된 이 블로그 게시물을 확인하십시오.

PHP

  • Basic support for generics in PHP
  • PHP 8.1 Enums
  • One-line array shapes
  • New inspections and quick-fixes
  • Refactoring opportunities inspections
  • Formatter improvements
  • Reworked Extract Method refactoring

IDE

  • Actions on save
  • New Terminal options
  • Run tests before commit
  • Browser pages reload on save
  • Automatic clean-up of caches and log directories
  • Advanced settings

Code With Me

  • Screen sharing

PHP 7.4.22, PHP 8.0.9

https://www.php.net/ChangeLog-7.php#7.4.22
https://www.php.net/ChangeLog-8.php#8.0.9

현재 branch에 대한 보안 및 버그 수정 업데이트.

🐘 PHP Internals

[RFC] Nullable Intersection types

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

Type intersection에 관한 RFC르 채택한 직후 Nikolas Grekas(Symfony core)가 의견을 게시했습니다. 그는 intersection을 nullable로 만들 수 있는 기능이 없으면 훨씬 덜 흥미롭다고 말했습니다.

기술적으로 PHP 8.1 branch는 이미 동결되었지만(frozen) PHP 팀은 이 제안에 예외를 적용하기로 결정했습니다.

class Foo
{
public (X&Y)|null $bar;

function setBar((X&Y)|null $bar = null): (X&Y)|null
{
return $this->bar = $bar;
}
}

Syntax choice is also put to a vote: ?X&Y or (X&Y)|null.
구문 선택도 투표에 포함됩니다: ?X&Y 또는 (X&Y)|null.

[RFC] Unwrap reference after foreach

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

현재 버전의 PHP에는 foreach 루프에 대한 전용 scope가 없습니다. 이것은 매우 직관적이지 않은 결과를 가져옵니다. foreach 루프가 끝난 후에도 $value의 reference와 배열의 마지막 요소에 대한 참조가 유지됩니다.

문제는 다음 예를 통해 쉽게 설명됩니다.

$array = [0, 1, 2];
foreach ($array as &$value) { /* ... */ }
// without calling unset($value),
// $value still points to the last element: $array[2]

foreach ($array as $value) {
// $array[2] will be updated each time with the values of $array
}
var_dump($array);

// Before RFC:
>
array(3) {
[0] => int(0)
[1] => int(1)
[2] => &int(1)
}

// After RFC:
> array(3) {
[0] => int(0)
[1] => int(1)
[2] => int(2)
}

이 RFC는 논리적으로는 문제 없지만 버그가 있어 보이는 동작을 수정하도록 제안합니다. foreach 루프 후에 $value에 대한 참조가 제거됩니다.

[RFC] Never For Parameter Types

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

PHP 8.1에는 never라는 새로운 반환값 유형이 있습니다. PHP 8.2의 경우 never를 매개변수 유형으로 사용할 수 있도록 하는 제안이 이미 있습니다.

RFC의 저자인 Jordan LeDoux는 never가 추상 클래스와 인터페이스에서 유용할 것이라고 생각합니다. 매개변수를 어떤 방식으로든 입력해야 함을 지정하는 데 사용할 수 있습니다.

이것은 제네릭의 동작을 모방하는 데 도움이 될 수 있습니다. 그러나 정적 분석기 및 PhpStorm에 대해서는 여전히 PHPDoc의 type description에 의존해야 합니다.

interface CollectionInterface {
public function add(never $input): self;
}

class A implements CollectionInterface {
public function add(int $input): self {}
}

🛠 Tools

frontdevops/php-evil

https://github.com/frontdevops/php-evil

eval()을 비활성화하는 extension. eval()은 함수가 아닌 언어 구조이므로, disable_functions로는 막을 수 없습니다. 그래서 저자는 자신만의 작은 extension을 만들어야 했습니다.

beyondcode/expose 2.0

https://github.com/beyondcode/expose/releases/tag/2.0.0

ngrok의 대안으로, 로컬 환경의 서비스를 전 세계에 몰래 서비스 하기 위한 멋진 도구입니다. 웹훅을 테스트하거나 앱을 시연하는 데 유용해야 합니다.

EcotoneFramework

https://github.com/ecotoneframework

PHP에서 DDD, CQRS 및 이벤트 소싱을 하기 위한 흥미로운 서비스 버스입니다. 속성을 통해 PHP 8 이상에서 작동하며 Laravel 및 Symfony에 대한 훌륭한 문서 및 통합 기능이 있습니다. 다음은 CQRS 구현의 예 입니다.

PHP-CSS-Parser

https://github.com/sabberworm/PHP-CSS-Parser

PHP로 작성된 CSS 파일용 파서. 이를 통해 CSS 파일을 데이터 구조로 추출하고 해당 구조를 조작하고 (최적화된) CSS로 출력할 수 있습니다.

Psalm 4.9.0

https://github.com/vimeo/psalm/releases/tag/4.9.0

저자인 Matt Brown 이 프로젝트를 떠난 후의 첫 번째 커뮤니티 릴리스입니다.

ergebnis/composer-normalize

https://github.com/ergebnis/composer-normalize

composer.json파일을 멋지게 보이게 하는 Composer용 플러그인입니다.

paragonie/paseto 2.0 – Stateless-token, a safe alternative to JWT.

https://github.com/paragonie/paseto/releases/tag/v2.0.0

JWT의 안전한 대안인 Stateless-token.

결함이 있는 JOSE(Javascript Object Signing and Encryption) 대신 안전한 Paseto(Platform-Agnostic SEcurity TOkens) 표준을 사용하자고 합니다.

JOSE 표준에 어떤 결함이 있는지는 여기서 확인해보세요.

chrome-php/chrome v1.0.0

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

헤드리스 모드에서 Chrome/Chromium을 제어하기 위한 패키지입니다.

darsyn/ip

https://github.com/darsyn/ip

Doctrine을 위한 헬퍼를 포함한, IP 주소 작업을 위한 Immutable value objects

MadLisp

http://madlisp.com/

PHP로 작성된 Lisp 인터프리터.

Symfony

The Symfony team now provides support in the Discussions section on GitHub.

https://github.com/symfony/symfony/discussions/42363

Symfony 팀은 이제 GitHub의 토론 섹션에서 도움(support)을 제공합니다.

Scaling the Symfony Demo app to the extreme with Varnish.

https://jolicode.com/blog/scaling-the-symfony-demo-app-to-the-extreme-with-varnish

Varnish를 통해 Symfony Demo app을 극단적으로(소수의 사용자에서 수만 명의 동시 사용자로) 확장해봅니다.

Symfony Lock

https://medium.com/geekculture/symfony-lock-dealing-with-shared-resources-concurrency-and-parallelism-f4df66a744de

공유 리소스, 동시성, 병렬성을 다룹니다.

A way to centrally handle Doctrine/Symfony access control.

https://medium.marco.zone/doctrine-symfony-centralized-access-control-d1f4717734e5

Doctrine/Symfony 액세스 제어를 중앙에서 처리하는 방법

How to use cascade delete in Doctrine

https://medium.com/accesto/how-to-delete-not-to-delete-yourself-accesto-blog-9c252f684db5

Doctrine에서 cascade 삭제를 사용하면서 모든 데이터를 잃지 않는 법.

A week of Symfony #763 (9-15 August 2021).

https://symfony.com/blog/a-week-of-symfony-763-9-15-august-2021

Laravel

Laracon Online

https://laracon.net/#schedule

9월 1일로 예정되어 있습니다.

laravelexamples.com

https://laravelexamples.com/

Laravel Daily YouTube 채널 작성자의 Laravel에 대한 유용한 예제 카탈로그입니다 .

LaravelDaily/Laravel-Roadmap-Learning-Path

https://github.com/LaravelDaily/Laravel-Roadmap-Learning-Path

어떤 개발 경험 수준에도 도움이 될 멋진 Laravel 교육 자료 모음입니다.

Building an app to scale on Laravel Vapor.

https://dyrynda.com.au/blog/scaling-on-laravel-vapor

Laravel Vapor에서 앱을 확장하는 방법.

Immutable dates in Laravel.

https://dyrynda.com.au/blog/laravel-immutable-dates/

Taylor Otwell(@taylorotwell)의 트윗

This week’s 8.53.0 release includes new “immutable_date” and “immutable_datetime” casts for Eloquent!

Carbon을 다루면서 흔히 하는 실수가 있죠.

$start = Carbon\Carbon::now();
$end = $start->addDay();
$end->diffForHumans($start); // 1 second before

Carbon을 쓰는 대신 CarbonImmutable을 사용하면 이 문제를 피할 수 있습니다.

$start = Carbon\CarbonImmutable::now();
$end = $start->addDay();
$end->diffForHumans($start); // 1 day after

Carbon\Carbon이나 Illuminate\Support\Carbon 대신 Illuminate\Support\Facades\Date로 바꿔주는 식으로 변경해줄 수도 있습니다.

📺 60+ Laravel collection methods in 15 minutes.

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

15분 안에 60 개 이상의 Laravel Collection method를 살펴봅니다.

📺 What’s new in Laravel v8.53.0

https://www.youtube.com/watch?v=8Iz1UqSbpwA

Laravel YouTube 채널 에서 더 많은 동영상을 확인하세요.

Yii

Yii framework team continues to release packages for the upcoming Yii 3: yiisoft/data-response, yiisoft/view, yiisoft/yii-view, yiisoft/mailer.

PhpStorm

i18n Ally

https://plugins.jetbrains.com/plugin/17212-i18n-ally

번역을 위한 문자열을 쉽게 작업할 수 있는 PhpStorm용 플러그인입니다. Laravel 및 Symfony에 대해 자동으로 구성되며 Yii, CodeIgniter 및 CakePHP에 대해 수동으로 구성할 수 있습니다.

Laravel Idea 4.4

https://laravel-idea.com/blog/2021/4-4-release

큰 업데이트가 있었답니다.

📺 Source diving the PhpStorm Pest plugin

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

Oliver Nybroe가 PhpStorm 플러그인 개발 방법을 보여주는 멋진 스트림 녹화.

💡 기타 읽을 만한 글

We don’t need runtime type checks

https://stitcher.io/blog/we-dont-need-runtime-type-checks

Sarah Golemon, Rasmus Lerdorf 및 Nikita Popov의 인용문과 함께 Brent Roose의 PHP 유형 시스템에 대한 흥미로운 사색입니다.

얼마 전, PHP의 제네릭이 조만간 나오지 않을 것이라는 것이 분명해졌고, 주요 이유 중 하나는 이를 구현하는 두 가지 방법이 있으며 둘 다 심각한 문제가 있다는 것입니다. 런타임 성능에 미치는 영향이 너무 크거나 구현이 너무 복잡하여 제대로 작동하지 않습니다. 두 접근 방식 모두 런타임 유형 검사 구현을 가정했습니다.

Sarah Golemon은,
(Hack이 이미 수행하고 있는) 런타임에 무시되는 제네릭이 대부분의 PHP 개발자에게 익숙하지 않은 패러다임 전환이라고 보며, 이런 변화는 5년 이상 걸릴 것이라고 생각합니다.

Brent는,
우리가 원하는 경우 PHP의 런타임 타입 체크를 해제하고 그 결과를 스스로 처리할 수 있어야 하며, 이런 시나리오에서는 정적분석기를 사용해야 한다고 말합니다.
이를 위해 이상적으로는 PHP가 built-in, opt-in 정적분석기와 함께 배포되어야 할 거라고 이야기 합니다.

Nikita는,
런타임에 지워지는 제네릭을 “비겁한 탈출구”라고 불렀습니다. 런타임에 지워지는 제네릭이 지원된다면 PHP의 유형 시스템 내에서 일부 부분은 런타임에 확인되고 다른 부분은 정적으로 확인되는 엄청난 불일치가 있음을 의미하기 때문입니다.

Brent가 런타임에 지워지거나 무시되는 제네릭에서 시작해야 하는 건 아니고, 먼저 런타임 유형 검사가 없는 PHP가 필요하고 그 위에 빌드하는 것을 이야기 했을 때는 그도 긍정적으로 생각했지만, PHP를 완전히 재설계 하지 못한다는 제약 안에서 일해야 하므로 힘들다고 답변했습니다.

Brent는 PHP internals에서 정적 분석 측면을 더 탐구하기를 바란다며 글을 마칩니다.

다음은 Joe Watkins의 주제에 대한 또 다른 의견입니다.

Joe Watkins(@krakjoe)의 트윗

Removing types from #PHP, even at runtime:

  1. fundamentally changes the dynamic nature of PHP
  2. will complicate the type system considerably
  3. is not a solution to the complexity of a generics implementation
    Source: I’ve experimented.
    TL;DR it isn’t happening …

(내가 해봤는데 그거 안 돼)

The evolution of a PHP object throughout the years

https://stitcher.io/blog/evolution-of-a-php-object

data transfer objects가 PHP 버전업에 따라 수년 간 어떻게 변화했는지 보여줍니다.

글의 예제를 단순화해서 2014년과 2021년을 비교해보았습니다.

August 2014: PHP 5.6

class BlogData
{
/** @var \DateTimeImmutable|null */
private $publishedAt;

/**
* @param \DateTimeImmutable|null $publishedAt
*/
public function __construct(
$publishedAt = null
) {
$this->publishedAt = $publishedAt;
}

/**
* @return \DateTimeImmutable|null
*/
public function getPublishedAt()
{
return $this->publishedAt;
}
}

November 2021: PHP 8.1

class BlogData
{
public function __construct(
public readonly ?DateTimeImmutable $publishedAt = null,
) {}
}

Functional programming and PHP 8

https://not-a-number.io/2021/functional-programming-and-php-8/

강력한 loophp/fpt(Functional Programming Toolbox) 툴 사용법을 예제와 함께 보여줍니다.

phpschool.io: PHP 8 Appreciate

https://www.phpschool.io/blog/2021/07/24/introducing-php-8-appreciate

PHP 8을 배우기 위한 CLI 워크숍.

b-viguier/php-emoji

https://github.com/b-viguier/php-emoji

이모지로 PHP 배열 함수를 설명합니다.

php-emoji 예시 이미지

📺 Videos

📺 What’s new in PHP 8.1 – Enums

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

Marcel Pociot의 열거형에 대한 자세한 둘러보기.

📺 Event Sourcery Full Course – CQRS and Event Sourcing.

https://www.youtube.com/playlist?list=PLQuwqoolg4aI6v1GvtRg3NgT0PBBHVqii

CQRS 및 이벤트 소싱.

📺 PHP Roundtable 82

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

전설적인 PHP 팟캐스트의 귀환. Sammy K를 응원 하고 새로운 호스트 Eric Van Johnson을 환영합니다!

Php_annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2021년 5월호의 번역/해석본입니다.

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


Composer의 통계에 따르면 PHP 8.0이 추진력을 얻고 있으며 더 많이 채택되고 있습니다.

한편, PHP internals에선 번들로 제공되는 PHP 확장의 네임 스페이스, 새로운 never 유형, 더 이상 사용되지 않을 일부 기능을 포함한 PHP 8.1에 대한 많은 변경 사항을 수용했습니다.

PHP 8.1 릴리스 관리자(release managers)가 선택됐으며 속성 접근자(property accessors), 순수 교차 유형(pure intersection types) 및 final 상수(final constants)를 포함하여 몇 가지 흥미로운 제안이 논의 중입니다.

⚡️ News

PHP Versions Stats – 2021.1

https://blog.packagist.com/php-versions-stats-2021-1-edition/

Composer가 packagist.org에 연결할 때 전송하는 데이터를 기반으로하는 전통적인 통계 기록:

  • PHP 7.4: 45.92% (+3.31)
  • PHP 7.3: 21.30% (-5.75)
  • PHP 7.2: 12.89% (-2.39)
  • PHP 8.0: 9.44% (+9.17)
  • PHP 7.1: 5.21% (-2.24)

PHP is available on Google Cloud Functions

https://cloud.google.com/blog/products/application-development/php-comes-to-cloud-functions

Google Cloud의 서버리스 플랫폼은 이제 PHP를 정식으로 지원합니다. GoogleCloudPlatform/functions-framework-php를 사용하면 PHP 7.4 기반 런타임에서 function을 실행할 수 있습니다.

Composer Command Injection Vulnerability

https://blog.packagist.com/composer-command-injection-vulnerability/

이번 Composer의 취약점은 Mercurial이 설치된 시스템에만 영향을줍니다. 그러나 수정 사항이 포함된 2.0.13 및 1.10.22 버전으로 즉시 업데이트하는 것이 좋습니다. 취약점에 대한 더 자세한 기술 분석을 확인하십시오.

Follow up on git.php.net attack

https://externals.io/message/113981

공격자들은 Rasmus Lerdorf와 Nikita Popov를 대신하여 두 개의 커밋을 PHP 소스에 푸시했습니다. 문제는 신속하게 감지되고 해결되었습니다. 악성 코드는 사용자에게 전달되지 않았습니다.

git.php.net 서버는 HTTPS를 통한 커밋을 허용하고 md5 해시를 secret으로 허용하는 다이제스트 인증을 사용한 것으로 나타났습니다. 모든 contributor의 해시 데이터베이스는 master.php.net에서 공격자에 의해 획득되었으며, 아마 원래는 손상된 서버일 것입니다.

결과적으로 모든 개발이 GitHub로 완전히 옮겨져 언어 개발자의 삶이 더 편해졌습니다.

PHP 7.4.19, PHP 8.0.6

https://www.php.net/ChangeLog-7.php#7.4.19
https://www.php.net/ChangeLog-8.php#8.0.6

With a fix in PDO_pgsql.

🐘 PHP Internals

✅ [RFC] never type

PHP 8.1에는 반환 값에 never라는 새로운 type이 추가됩니다.

never type으로 선언된 함수 또는 메서드는 값을 반환하지 않을 것임을 나타내며 예외를 throw하거나 die(), exit(), trigger_error() 유형의 호출로 종료됩니다.

이는 bottom type이며 다른 모든 type의 하위 type이며 Python, Rust, Kotlin 및 TypeScript에 유사한 type이 있습니다. 이 type은 정적 분석을 향상시킵니다.

function redirect(string $uri): never {
header('Location: ' . $uri);
exit();
}

function redirectToLoginPage(): never {
redirect('/login');
}

RFC는 이름부터 noreturn으로 제안이 됐지만, 투표로 최종 never로 결정됐습니다. RFC의 Naming 섹션 참고하세요.

자세한 내용은 PHP.Watch에서 보거나 Matt Brown과 Ondřej Mirtes가 함께 하는 PHP Internals News podcast에서 들을 수 있습니다.

✅ [RFC] Deprecate implicit non-integer-compatible float to int conversions

https://wiki.php.net/rfc/implicit-float-int-deprecate

PHP 8.1에서는 float가 int로 변환되고 소수 부분이 손실되면 E_DEPRECATED 알림이 발생합니다. 나중에 PHP 9.0에서는 TypeError가 발생합니다.

function acceptInt(int $i) {
var_dump($i);
}
acceptInt(3.1415);
> int(3) // Deprecation notice

George Peter Banyard와 함께 하는 🔈 PHP Internals News podcast #83에서 자세히 알아보세요.

✅ [RFC] Phasing out Serializable

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

PHP 8.1에서는 Serializable 인터페이스가 더 이상 사용되지 않습니다. 클래스가 오직 이 인터페이스만 사용하는 경우, 즉 클래스에 새로운 매직 메서드인 __serialize() 및 __unserialize()가 추가로 없는 경우 deprecation 알림이 발생합니다.

✅ [RFC] Namespaces in bundled PHP extensions

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

이것은 더 깨끗한 PHP를 향한 작은 발걸음입니다! Extension의 새로운 심볼(클래스, 인터페이스 등)은 이제 네임 스페이스를 사용해야합니다.

여기 예시가 있습니다. resource type은 PHP에서 사실상 더 이상 사용되지 않으며 기존의 모든 리소스가 천천히 object로 마이그레이션되고 있습니다. PHP 8.1에서 일부 리소스는 다음 네임 스페이스 클래스로 대체됩니다.

IMAPConnection -> IMAP\Connection
FTPConnection -> FTP\Connection
LDAP -> LDAP\Connection
LDAPResult -> LDAP\Result
LDAPResultEntry -> LDAP\ResultEntry
PgSql -> PgSql\Connection
PgSqlResult -> PgSql\Result
PgSqlLob -> PgSql\Lob

✅ [RFC] Add return type declarations for internal methods

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

PHP 8.0에 내장된 대부분의 메소드는 매개 변수를 받고 유형 선언을 반환합니다. 그러나 문제는 public non-final 메서드의 반환 값과 같이 사용자 코드에서 재정의 될 수 있는 경우입니다.

class SomeStandardClass
{
public function method(): int {}
}

class UserClass extends SomeStandardClass
{
public function method() {}
}

// Fatal error: Declaration of UserClass::method() must be compatible with SomeStandardClass::method()

공변(covariance) 규칙에 따라, 재정의된 메소드에 다른 반환 type을 추가할 수 있지만, 메소드 시그니처가 다르면 하위 호환이 깨집니다. PHP 프로젝트 리더들은 아직 큰 하위 호환 문제를 일으키지 않도록 장기적/점진적으로 마이그레이션을 할 수 있게 지원하기로 했습니다.

PHP 8.1에서 모든 내부 메서드는 누락된 type도 가져옵니다. 사용자 코드에서 재정의 된 경우 사용 중단 알림이 표시됩니다.

class MyDateTime extends DateTime
{
public function modify(string $modifier) { return false; }
}

// Deprecated: Declaration of MyDateTime::modify(string $modifier) should be compatible with DateTime::modify(string $modifier): DateTime|false

Release managers for PHP 8.1 have been selected

https://wiki.php.net/todo/php81#release_managers

이번 릴리스에서는 세 명의 release manager가 있습니다.
경험이 풍부한 Joe Watkins (pthreads, parallel, pcov)와 두 명의 신참 인 Patrick Allaert (blackfire.io) 및 Ben Ramsey (ramsey/uuid)의 세 명의 관리자가 있습니다. Ben과 Patrick이 함께 하는 PHP Internals News podcast #84를 확인하십시오.

New proposals for PHP 8.1:

[RFC] Partial Function Application

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

Partial Function Application은 일부 인수만 함수 호출에 바인딩되고 나머지 인수는 나중에 전달될 매개 변수로 남아있는 경우입니다.

예를 들어, 여기 전체 함수가 있습니다.

function whole($one, $two) {
/* ... */
}

이 전체 함수를 기초로 부분 함수가 있습니다.

$partial = whole(?, 2);

이제 이 부분 함수의 시그니처는 아래와 같습니다.

function($one) {
/* ... */
}

이게 왜 필요하죠?

첫째, 이제 모든 함수 또는 메서드에 대한 참조를 가져 와서 Callable이 예상되는 곳에 전달할 수 있습니다. 예를 들어 다음과 같이 할 수 있습니다.

array_map(Something::toString(?), [1, 2, 3]);
array_map(strval(?), [1, 2, 3]);

// 아래 코드 대신
array_map([Something::class, 'toString'], [1, 2, 3])
array_map('strval', [1, 2, 3]);

둘째, 결과적으로 파이프 연산자 |>를 구현할 수 있습니다.

$result = "Hello World"
|> htmlentities(?)
|> explode(?);

RFC 및 구현에 대해 Larry Garfield, Joe Watkins, Levi Morrison 및 Paul Crovella에게 감사드립니다.

[RFC] Property Accessors

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

Nikita는 속성 접근자의 구현을 완료했으며 현재 제안은 공식적으로 논의 중입니다.

결론은 기존의 getter 및 setter는 사용하기 편리하지 않으며 매직 메서드 __get 및 __set은 구체적이지 않다는 것입니다. 새로운 접근자는 이러한 문제를 해결하기위한 것입니다.

C#에서 영감을 얻은 문법:

class Foo {
public $prop {
get { /* ... */ }
set { /* ... */ }
}
}

이를 사용하여 읽기 전용 속성을 구현할 수 있습니다.

class User {
public string $name { get; }

public function __construct(string $name) {
$this->name = $name;
}
}

비대칭 액세스를 지정할 수 있습니다. 즉, 읽기 및 쓰기를 위해 별도로 공개 또는 비공개로 설정할 수 있습니다.

class User {
public string $name { get; private set; }

...
}

또는 유효성 검사 또는 기타 작업을 위한 완전히 구현된 메소드로 사용할 수 있습니다.

class Foo {
public int $bar {
get {
error_log('Getting $bar');
return $this->bar;
}
set {
assert($bar > 42);
$this->bar = $bar;
}
}
}

[RFC] Pure intersection types

https://wiki.php.net/rfc/pure-intersection-types

통합 유형은 PHP 8.0에 추가되었으며 이 RFC는 교차 유형 추가를 제안합니다.

구문은 TypeA & TypeB이며, 이는 변수가 TypeA 및 TypeB의 인스턴스여야 함을 의미합니다.

class A {
private Traversable&Countable $countableIterator;

public function setIterator(Traversable&Countable $countableIterator): void {
$this->countableIterator = $countableIterator;
}

public function getIterator(): Traversable&Countable {
return $this->countableIterator;
}
}

이 제안을 “순수 교차 type”이라고합니다. union type의 조합은 지원되지 않으며 향후 고려할 수 있도록 남아 있기 때문입니다. 복잡한 유형에 대한 별칭도 미래를 위해 남아 있습니다.

[RFC] Deprecate ticks

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

PHP에는 틱 매커니즘이 있습니다 : declare(ticks=1). 원래 pcntl 신호를 추적하는 데 필요했습니다. 이제 pcntl_signal() 및 pcntl_async_signals()를 대신 사용할 수 있습니다. 이것이 PHP 8.1에서 틱을 폐기하고 PHP 9에서 완전히 제거하라는 제안이 있었던 이유입니다.

[RFC] Final class constants

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

이 RFC의 작성자는 상수에 대한 final 수정자를 제안하므로 자식 클래스에서 재정의 할 수 없습니다.

class Foo
{
final public const X = "foo";
}

class Bar extends Foo
{
public const X = "bar";
}

// Fatal error: Bar::X cannot override final constant Foo::X

흥미로운 사실은 인터페이스 상수는 이미 final이라는 것입니다.

PHP 소스에 기여하고 싶은 사람들을위한 몇 가지 추가 링크

Using CLion with php-src

  • PHP 8.1의 릴리스 관리자 중 하나인 Ben Ramsey의 지침입니다.

How to compile PHP from source on Debian/Ubuntu

  • Beginner’s guide on PHP.Watch.

🛠 Tools

spatie/data-transfer-object v3

https://github.com/spatie/data-transfer-object

spatie가 PHP 8에서 type이 정의된 DTO를 쉽게 만들기 위한 패키지를 만들었습니다.

spatie/fork

https://github.com/spatie/fork

pcntl_fork를 위한 래퍼로 PHP 스크립트를 병렬로 간단하고 편리하게 실행할 수 있습니다. 이 블로그 게시물과 이 비디오에서 자세히 알아보십시오.

phpbench/phpbench 1.0.0

https://github.com/phpbench/phpbench/releases/tag/1.0.0

코드를 벤치마킹하는 데 유용한 도구입니다. 새 버전에는 PHP 8 지원을 포함하여 많은 업데이트가 있습니다.

Dan Leech와 함께 📺 Release Radar #10에서 더 알아보세요.

rybakit/phpunit-extras

https://github.com/rybakit/phpunit-extras

테스트를 더 깔끔하게 만들 PHPUnit을 위한 커스텀 annotation과 expect*() 메소드.

infection 0.23.0

https://infection.github.io/2021/05/13/whats-new-in-0.23.0/#Pest-Test-Framework-support

Mutation 테스트 지원 도구가 업데이트 됐습니다. 이제 pestphp/pest를 지원합니다.

captainhookphp/captainhook

https://github.com/captainhookphp/captainhook

PHP 프로젝트를 위한 Git hook 관리. 예를 들어, 스타일 검사를 쉽게 설정하거나 저장소로 푸시하기 전에 테스트를 실행할 수 있습니다.

0xABADCAFE/php-demo-engine

https://github.com/0xABADCAFE/php-demo-engine

재미로 만든 PHP의 데모씬 엔진. 콘솔에 ASCII 기호가있는 그래픽을 표시합니다.

demoscene sample graphic

Symfony

Laravel

Yii

PhpStorm

💡 기타 읽을 만한 글

Upgrading a Project to PHP 8.0

https://medium.com/oro-development/upgrade-to-php-8-64f770ae4479

PHP 7.4에서 8.0으로 업그레이드 할 때의 업데이트 계획 및 코드베이스를 주요 잠재적 어려움에 대한 설명.

작성자가 업그레이드 했던 코드는 Symfony 4.4 LTS, 300만 이상의 LoC, 60만 PHP class, test 코드 포함, vendor 제외.

결론

  • 오픈 소스 커뮤니티는 PHP 릴리스를 적극적으로 모니터링하고 새로운 버전의 PHP에 대한 지원을 라이브러리에 추가합니다.
  • composer.json에서 실제로 지원되는 PHP 버전 만 나열하면 composer가 기본 제공하는 종속성 분석기(composer why-not php 8) 덕분에 프로젝트에서 이런 라이브러리를 사용하는 개발자에게 큰 도움이됩니다.
  • PHPStorm은 코드 작성을위한 뛰어난 IDE 일뿐만 아니라 코드베이스를 최신 버전의 PHP로 마이그레이션하는 데 도움이되는 정적 코드 분석 도구를 제공합니다. (작성자는 전체 코드 혹은 특정 디렉토리를 기준으로 정적 분석 도구를 사용했고 PhpStorm이 가장 많이 도움이 됐다고 합니다)
  • 자동화 된 테스트를 통한 높은 적용 범위는 마이그레이션 프로세스를 크게 단순화합니다. (그럼요!)
  • 새로운 주요 버전의 PHP로 업그레이드하는 것은 언뜻보기에 그리 어렵지 않습니다. (설마요!)

Do not mock what you do not own

https://thephp.cc/articles/do-not-mock-what-you-do-not-own

소유하지 않은 것은 mocking하지 말 것. 대체된 종속성을 제어하지 않으면, 다른 것도 제어가 안 되기 시작할 겁니다.

Named-entity recognition in PHP

https://www.we-rc.com/blog/2021/04/04/named-entity-recognition-in-php

RubixML을 사용하여 간단한 ML 문제를 해결하는 예입니다.

Using exceptions and retries when working with network services.

https://blog.frankdejonge.nl/back-the-func-off/

실패를 수용하는 추상 레이어 디자인을 소개합니다.

controller같은 사용자 레이어에서 아래와 같은 코드는 DatabaseException 같은 구현 세부 사항을 알아야 하기 때문에 추상화 누출 사고가 납니다.

try {
$this->fleet->markUnavailable($command->carId());
} catch (DatabaseException $e) {
// handle exception
}

아래 코드처럼 뒤에 어떤 구현이 있는지 몰라도 이해할 수 있게 Exception을 대체하는 방식을 소개합니다.

final class UnableToMarkCarUnavailable extends RuntimeException
{
public function because(string $reason, Throwable $previous): self
{
return new self(
"Unable to mark car unavailable. $reason",
0,
$previous
);
}
}

그리고 HTTP 기반 API는 광범위한 네트워크 관련 문제에 노출되기 때문에, 서비스 재시도 매커니즘을 두어야 한다고 말합니다. 이때 재시도 매커니즘을 사용자 레이어 안에 배치할지 구현 레이어 안에 배치할 지는 각각 장단점이 있습니다. 점진적으로 간격을 늘려주는 back-off 전략이 필요하다면 eventsauce/backoff 패키지를 사용할 수도 있습니다.

Algorithmic complexity (big O notation) of built-in PHP functions.

https://stackoverflow.com/questions/2473989/list-of-big-o-for-php-functions/2484455#2484455

내장 PHP 함수의 알고리즘 복잡성 (big O 표기법).

몇 가지 흥미로운 점

  • isset / array_key_exists가 in_array / array_search 보다 훨씬 빠르다
  • +(union)이 array_merge보다 훨씬 빠르다(보기도 좋다). 물론 동작 방식은 다르지만.
  • shuffle은 array_rand와 동일한 Big-O tier에 존재한다.
  • array_pop / array_push는 array_shift / array_unshift 보다 빠르다. 재 인덱스 때문.

참고로 2010에 쓴 답변입니다.

https://blog.exussum.co.uk/licence.html

Packagist에서 가장 인기있는 패키지와 해당 라이선스 살펴보기. 많은 인기있는 패키지에는 라이선스가 없거나 잘못 설정되어 있습니다.

📺 Videos

Modern PHP with Rasmus Lerdorf

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

PHP의 아버지가 약간의 Etsy의 코드와 PHP 8에 대해 이야기합니다.

Videos from Derick Rethans on Xdebug 3

🔈 Podcasts

PHP Ugly podcast:
#236: – Memory Leaks.
#235: – Ugly Hot Tub PHP Coding.

PHP Release Radar:
Episode #9 – With Andreas Braun discussing Doctrine Cache 2.0.

PHP Internals News podcast:
Episode #82 – About auto-capturing multi-statement closures (RFC) with Larry Garfield and Nuno Maduro.
Episode #79 – About the new operator in initializers with Nikita Popov.

🙌 Community

PHP’s bus factor is 2

https://blog.krakjoe.ninja/2021/05/avoiding-busses.html

Joe Watkins는 PHP 소스에 대해 충분히 알고있는 사람은 두 사람뿐이므로 PHP에 새로운 기능을 추가 할 때이 점을 고려해야합니다. 그는 또한 코어에서 작업하는 더 많은 개발자가 필요하다고 말합니다.

0%