PHP Annotated – December 2022

PHP Annotated 이미지

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

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


안녕하세요!

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

News

🎉 PHP 8.2.0 released!

PHP 8.2.0 출시!

PHP 8.2는 PHP 언어의 주요(major) 업데이트입니다. 여기에는 readonly classes, DNF 유형, 독립 실행형 유형으로써의 null / false / true, 새로운 랜덤마이저 API(random extension) 및 trait에서의 상수를 포함한 새로운 기능이 포함되어 있습니다.

이 릴리스에는 몇 가지 지원 중단(deprecation) 사항이 포함되어 있으며, 지원 중단된 동적 속성(dynamic property)이 아마도 가장 중요할 것입니다. 평소와 같이 성능 향상도 있습니다.

PHP 8.2의 새로운 기능에 대한 자세한 목록은 릴리스 페이지를 확인하세요.
또한 PHP.Watch에서 PHP 8.2 Highlights와 동료 Brent 의 PHP 8.2 overview 비디오를 확인하십시오.

PHP 8.2 설치/업그레이드

⚠️ PHP 7 has reached end of life

PHP 7의 수명이 다했습니다.

PHP 7.4.33은 PHP 7의 마지막 릴리스였습니다. PHP 7은 더 이상 공식 보안 업데이트를 받지 않습니다.

그러나 RedHat 또는 Ubuntu와 같은 주요 배포판은 LTS 전제의 일부로 PHP 7.4용 보안 업데이트를 제공합니다.

PHP 8.0.26 and PHP 8.1.13 have been released

PHP 8.0.26PHP 8.1.13이 릴리스되었습니다

🐛 이들은 버그 수정 릴리스 입니다.

PHP 8.0 branch는 활성 지원(active support)을 종료했으며 보안 수정 업데이트만 받게 됩니다.

🎂 PHP Foundation turns 1 year

PHP Foundation이 1년을 맞이합니다.

PHP Foundation은 1 년 전에 설립되었습니다.

지난 1년 동안 PHP 재단은 6명의 핵심 개발자의 작업을 지원 했으며 PHP 언어에 상당한 기여를 했습니다.

2022년 영향 및 투명성 보고서를 확인 하여 달성한 내용을 알아보고 2023년의 높은 수준의 목표를 확인하십시오.

OpenCollective를 통해 PHP 재단을 지원하는 것을 고려하십시오.

PhpStorm 2022.3 is out

PhpStorm 2022.3 출시

이 주요 업데이트는 새로운 UI 미리 보기, 완전한 PHP 8.2 지원, 데이터베이스 도구의 Redis 지원, PHP용 Code Vision, quick-fix 미리 보기, Xdebug 구성 유효성 검사, ParaTest 지원, PHPDoc용 리더 모드, 그리고 다른 많은 기능들.

Symfony 6.2 is out

Symfony 6.2가 출시되었습니다.

더 나은 이모지 지원, 액세스 토큰 인증자, 내장된 Cache+Security+Template+Doctrine Attribute, 개선된 열거형(enum) 지원 등이 있습니다.

이 새로운 릴리스의 하이라이트에 대해 알아보려면 선별된 새 기능 목록(Curated New Features)을 확인하십시오.

📺 PHP Annotated on YouTube

https://www.youtube.com/@phpannotated

PHP Annotated가 PHP Annotated 뉴스레터 외에도 이제 YouTube에 전용 PHP Annotated 채널이 있습니다.

이 채널은 PHP와 커뮤니티에 관한 것이며 Brent Roose의 첫 번째 비디오를 확인할 수 있습니다.

✅ PSR-20: Clock accepted

PSR-20: Clock이 accepted가 됐습니다.

PHP-FIG 그룹은 날짜 및 시간에 대해 권장되는 ClockInterface를 사용하여 PSR-20을 수락하고 태그를 지정했습니다.

🎉 Psalm 5 is out

Psalm 5가 출시되었습니다.

이 릴리스에는 다음과 같은 몇 가지 새로운 기능이 있습니다: list{int, string, float}, properties-of, variable templates, int-range<x, y>.

Xdebug 3.2.0 is out

Xdebug 3.2.0가 출시되었습니다.

이 릴리스는 PHP 8.2에 대한 지원을 추가하고 PHP 7.2-7.4에 대한 지원을 중단합니다. 함수 반환 값 을 검사하는 새로운 기능이 있으며 더 나은 경고 메시지가 제공됩니다.

PHPStan 1.9.0 has been released

PHPStan 1.9.0이 출시되었습니다.

이 업데이트는 PHPDoc 어설션, 목록 유형, reference에 의해 할당된 매개변수에 대한 @param-out 태그 및 기타 개선 사항을 제공합니다.

Drupal 10 is available

Drupal 10을 사용할 수 있습니다.

Symfony 6.2 및 PHP 8.1 이상 필요하며 모든 시스템에서 많은 개선 사항을 추가합니다.

PHP Core

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

📣 PHP RFC: Dynamic class constant fetch #PHP 8.3

PHP RFC: 동적 클래스 상수 가져오기 #PHP 8.3

Ilija Tovilo는 클래스 상수를 찾기 위한 구문 도입을 제안했습니다.

class Foo {    
const BAR = 'bar';
}
$bar = 'BAR';

// This is currently a syntax error
echo Foo::{$bar};

// Instead, the `constant` function must be used
echo constant(Foo::class . '::' . $bar);

📣 RFC: Arbitrary static variable initializers #PHP 8.3

RFC: 임의의 정적 변수 이니셜라이저 #PHP 8.3

Ilija Tovilo는 정적 변수 이니셜라이저에 임의의 표현식을 포함할 수 있는 구문 확장을 제안했습니다.

function bar() {    
echo "bar() called\n";
return 1;
}

function foo() {
static $i = bar();
echo $i++, "\n";
}

foo();

📣 RFC: Readonly amendments #PHP 8.3

RFC: 읽기 전용 수정안 #PHP 8.3

Nicolas Grekas 및 Máté Kocsis는 읽기 전용 속성 및 클래스를 개선하여 ‘읽기 전용이 아닌 클래스’가 ‘읽기 전용 클래스’를 확장할 수 있도록 하고 복제 중에 읽기 전용 속성이 다시 초기화되도록 할 것을 제안했습니다.

readonly class Foo {
public function __construct(
public DateTime $bar
) {}

public function __clone()
{
$this->bar = clone $this->bar;
}
}

$foo = new Foo(new DateTime());
$foo2 = clone $foo;

📊 RFC: More Appropriate Date/Time Exceptions #PHP 8.3

RFC: 보다 적절한 날짜/시간 예외 #PHP 8.3

Derick Rethans는 날짜/시간 확장 관련 예외 및 오류를 도입할 것을 제안했습니다.

📣 RFC: List\unique() and Assoc\unique() #PHP 8.3

RFC: List\unique() 와 Assoc\unique() #PHP 8.3

Ilija Tovilo는 array_unique()에서 지원하지 않는 경우에 대해 두 가지 새로운 기능을 추가할 것을 제안했습니다.

List\unique([1, 2, 3, 1, '2', 3.0, new Foo, ['bar']]);
// > [1, 2, 3, '2', 3.0, Foo, ['bar']]

Assoc\unique(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'foo']);
// > ['foo' => 'foo', 'bar' => 'bar']

📣 RFC: Unicode Text Processing #PHP 8.3

RFC: 유니코드 텍스트 처리 #PHP 8.3

Derick Rethans는 유니코드 텍스트 처리의 모든 복잡성을 알 필요 없이 훨씬 개발자 친화적으로 유니코드 텍스트를 사용하고 처리할 수
있는 새로운 Text 클래스를 도입할 것을 제안합니다.

$content = new Text('नमस्ते दुनिया');
if ($content->toLower()->startsWith('नमस्ते')) {
// ...
}

Tools

@phptinker

Marcel Pociot는 @phptinker를 언급하면 GitHub issues에서 PHP 코드 블록을 평가(evaluate)하는 깔끔한 GitHub 봇을 만들었습니다.

phptinker 예시

ramsey/uuid

ramsey/uuid – 어디에서나(universally) 고유한 식별자를 생성하기 위한 패키지의 새 버전은 UUID v8 및 사용자 지정 UUID를 지원합니다.

loophp/collection

loophp/collection – 메모리 친화적인 모듈식 컬렉션 클래스가 새로운 major 버전인 7.0.0을 출시했습니다.

php-rust-tools/parser

php-rust-tools/parserRyan ChandlerSaif Eddin이 Rust로 작성하며 아직 작업 중인 PHP 파서입니다.

어쩌면 당신은 언제든 순수하고 안전한 Rust를 사용하여 PHP 확장을 작성할 수 있게 해주는 도구인 PHPer에도 관심이 있을 것 입니다.

ScriptFUSION/Porter

ScriptFUSION/Porter – 규모에 맞게 데이터를 소비하고 테스트 가능한 SDK를 배포(publishing)하기 위한 내구성 있는, 비동기식으로 데이터 가져오는 도구(importer).

PHP client for OpenAI

ChatGPT가 모든 것을 대체하고 있으므로 OpenAI용 PHP 클라이언트를 확인하고 싶을 수 있습니다.

  • openai-php/client – OpenAI API와 상호 작용할 수 있는 강력한 PHP API 클라이언트입니다.
    orhanerday/open-ai – OpenAI GPT-3 API에 액세스하기 위한 PHP SDK입니다.

qossmic/deptrac 1.0

qossmic/deptrac 1.0 – 애플리케이션 계층 간의 종속성을 결정하기 위한 프로젝트 아키텍처 분석 도구입니다.

revoltphp/event-loop 1.0.0

revoltphp/event-loop 1.0.0 – 이 이벤트 루프는 ReactPHP와 Amphp 관리자 간의 공동 노력입니다. 이제 production에서 사용할 준비가 되었으며 다양한 응용 프로그램 및 시나리오에서 테스트되었으며 fiber를 완벽하게 지원합니다.

a docker registry, which magically adds a docker layer for each extension requested with image

Shyim(@Shyim97)의 트윗

몇 년 동안 #docker를 사용한 #PHP 확장에 짜증이 났습니다. install-php-extensions가 도움이 되지만 여전히 확장을 컴파일해야 합니다.
그래서 이미지로 요청된 각 확장에 대한 도커 레이어를 마술처럼 추가하는 도커 레지스트리를 구축합니다. 이것은 실험적입니다!

php.shyim.de 사용 예시

rob893/emoji-cache

rob893/emoji-cache – LRU 캐시 구현이지만 모든 식별자는 이모티콘입니다.

emoji-cache 사용 예시

Symfony

API rate liming per route in Symfony 6.1 by Christian Nielebock.

Christian Nielebock의 Symfony 6.1에서 route당 API 속도 제한.

Asserting the output of Symfony console commands by Andreas Möller.

Andreas Möller의 Symfony 콘솔 명령 출력 어설션.

Discover Symfony UX components and enhance your front-end by Jakub Tobiasz.

Jakub Tobiasz의 Symfony UX 구성 요소를 살펴보고 프런트엔드를 개선하십시오.

Centralized exception handling with Symfony and custom PHP attributes by Dejan Angelov.

Dejan Angelov의 Symfony 및 맞춤형 PHP 속성을 사용한 중앙 집중식 예외 처리.

Laravel

Laravel best practices: the definitive guide for 2022 by Benjamin Crozat.

Benjamin Crozat의 Laravel best practices: 2022년 최종 가이드.

Table of contents

  • Keep Laravel up to date
  • Keep packages up to date
  • Keep your project tested
  • Stick to the default directory structure
  • Use custom form requests
  • Use single action controllers
  • Use policies
  • Prevent N+1 issues with eager loading
  • Use Eloquent’s strict mode
  • Use the new way of declaring accessors and mutators
  • Use anonymous migrations (Laravel 8 and above)
  • Use the down() method correctly
  • Use dispatchAfterResponse() for long-running tasks
  • Use queues for even longer running tasks
  • Lazily refresh your database
  • Make use of factories
  • Test against the production stack whenever it’s possible
  • Use database transactions
  • Don’t waste API calls, use mocks
  • Prevent stray HTTP requests
  • Don’t track your .env file
  • Don’t track your compiled CSS and JavaScript

Are Your Queue Workers … Working? by Jamison Valenta.

당신의 queue worker는… 일하고 있습니까?

대기열이 실행 중인지 확인하기 위해 Envoyer의 heartbeats 사용.

Using Generators for Pagination by James Bannister.

James Bannister의 Pagination을 위한 Generator 사용.

Unique jobs and reserving resources on the queue by Tim MacDonald.

Tim MacDonald의 대기열에 있는 고유한 작업 및 예약 리소스.

ShouldBeUniqueWithoutOverlapping을 활용해 큐에서의 원자적 잠금을 구현합니다.

A Look at What’s Coming to Laravel 10 by Paul Redmond.

Paul Redmond가 쓴 Laravel 10의 새로운 기능 살펴보기.

Save 1 million queries with Laravel Eager Loading by Valerio Barbera.

Valerio Barbera의 Laravel Eager Loading으로 하루에 백만 쿼리를 줄인 방법.

Laravel에 대한 Rector 규칙 세트Rector를 사용하지 않더라도 어쨌든 이 링크를 확인하십시오! Laravel 프로젝트에 대한 몇 가지 흥미로운 리팩토링 예제(diff)가 있습니다.

이외의 프레임워크

기타

24 Days in December

12월의 24일

매년 12월의 첫 24일 동안 PHP 커뮤니티 회원들이 생각을 공유합니다. 다음은 언급할 가치가 있는 몇 가지입니다.

Generics via Attributes in PHP by Roman Pronskiy.

Roman Pronskiy의 PHP에서 Attribute를 통한 제네릭.

PHP에서 제네릭을 검토했던 과정과 논의 내용을 소개하고 아래와 같은 방식으로 Attribute를 활용한 제네릭을 사용하는 것은 어떤지 질문합니다.

#[<T>]
class Stack
{
public function push(#[<T>] mixed $item): void
{
}

public function pop(): #[<T>] mixed
{
}
}

From annotations to attributes by Grégoire Paris.

Grégoire Paris의 annotation에서 attributes까지.

Doctrine project에서 ORM의 테스트를 annotation 방식에서 attribute 방식으로 변경한 과정을 설명합니다.
Rector를 통해 쉽게 변환됐고(2개의 오류만 발견), 변경점은 Run Rector라는 커밋으로 확인해보실 수 있습니다.

How to Measure Your Type Coverage by Tomas Votruba.

Tomas Votruba 의 Type Coverage를 측정하는 방법.

A story of Lazy Loading File System Operations for better dev system performance by Benjamin Eberlei.

Benjamin Eberlei의 더 나은 개발 시스템 성능을 위한 레이지 로딩 파일 시스템 작업에 대한 이야기.

Video

📺 Writing declarative PHP by Andrew Schmelyun.

Andrew Schmelyun의 선언적 PHP 작성.

📺 What’s New in PHP 8.2 by MergePHP.

MergePHP가 제공 하는 PHP 8.2의 새로운 기능.

📺 Guido van Rossum (creator of Python) and Lex Fridman discuss the $ sign in PHP variable names

Guido van Rossum(Python 창시자)과 Lex Fridman이 PHP 변수 이름의 $ 기호에 대해 논의합니다: Lex Fridman on PHP 프로그래밍.

Conferences


해피 홀리데이, PHPers! 🎄🐘