PHP Annotated – November 2023

PHP Annotated 이미지

Roman Pronskiy가 쓰고 JetBrains에서 제공하는 PHP Annotated 2023년 12월호입니다.


PHP Annotated 11월호에 오신 것을 환영합니다! 11월호에서는 엄선된 뉴스, 기사, 도구, 동영상을 통해 지난 한 달 동안 PHP 커뮤니티에서 가장 흥미로웠던 개발 동향을 되돌아봅니다.

Highlights

🎉 PHP 8.3.0 released!

https://www.php.net/releases/8.3/

PHP 8.3은 PHP 언어의 주요 업데이트입니다. 여기에는 입력형 클래스 상수, 읽기 전용 프로퍼티의 딥 복제, 랜덤 기능 추가 등 새로운 기능이 포함되어 있습니다. 항상 그렇듯이 성능 개선, 버그 수정, 전반적인 정리도 포함되어 있습니다.

PHP 8.3의 새로운 기능에 대한 자세한 목록은 릴리스 페이지마이그레이션 가이드에서 확인할 수 있으며, PHP 재단의 공지사항에서 릴리스에 대해 자세히 알아볼 수 있습니다.

PHP 8.3 설치 또는 업그레이드

  • Windows: 컴파일된 바이너리는 windows.php.net에서 찾을 수 있습니다. 또는 Chocolatey에서 제공되는 커뮤니티 빌드를 선택할 수 있습니다.
  • Ubuntu/Debian: PHP 8.3은 ondrej/php PPA에서 사용할 수 있습니다.
  • Fedora/RHEL/CentOS: Remi 저장소에서 소프트웨어 컬렉션(php83)으로 제공됩니다.
  • macOS: PHP 8.3은 홈브류를 통해 shivammathur/homebrew-php 탭을 사용하여 설치할 수 있습니다.
  • Docker: 이제 8.3 태그가 있는 PHP 8.3 이미지를 Docker Hub에서 사용할 수 있습니다.

PhpStorm은 이미 PHP 8.3을 지원합니다.

Freek, Brent, Roman과 함께하는 PHP 8.3 축하 스트림을 시청하세요.

⚠️ PHP 8.0의 수명이 다했습니다.

PHP 8.0.30은 PHP 8.0의 마지막 릴리스입니다. 더 이상 공식 보안 업데이트가 제공되지 않습니다.

PHP 8.1.26 and PHP 8.2.13 have been released

https://www.php.net/ChangeLog-8.php#8.1.26
https://www.php.net/ChangeLog-8.php#8.2.13

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

PHP 8.1 브랜치는 마지막 버그 수정 릴리스인 PHP 8.1.27이 한 번 더 릴리스될 예정이며, 그 이후에는 보안 버그 수정만 릴리스됩니다.

🎂 PHP 재단 창립 2주년

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

PHP 재단의 2023년 11월 업데이트를 확인하세요.

OpenCollective 또는 GitHub Sponsors를 통해 PHP 재단을 지원하는 것도 고려해 보세요.

PHP Core

대부분의 핵심 소식은 PHP 재단에서 제공하는 PHP 코어 라운드업 시리즈에서 자세히 다루고 있으므로 몇 가지만 간략하게 언급하겠습니다:

📣 RFC: Resource to object conversion

RFC: resource를 object로 변환

resource는 오래전부터 객체로 대체된 PHP의 구식 데이터 구조입니다. resource를 object로 대체하는 작업은 2013년에 시작되었지만, 대부분의 확장 기능은 PHP 8.0이 출시되면서 마이그레이션되었습니다.

Máté Kocsis는 나머지 확장 기능을 마이그레이션하고 향후 개발을 위한 정책을 정의할 것을 제안합니다.

📣 RFC: Release cycle update

RFC: 릴리스 주기 업데이트

현재 PHP 버전의 수명은 3년입니다. 많은 사람이 이 기간이 너무 짧고 6개월인 사전 릴리스 단계가 지나치게 길다고 생각합니다.
PHP 8.3 릴리스 관리자인 Jakub Zelenka는 PHP 버전 수명을 4년(유지보수 2년, 보안 업데이트 2년)으로 늘리고 사전 릴리스 단계를 수정할 것을 제안합니다.

📣 RFC: Improve callbacks in ext/dom and ext/xsl

RFC: ext/dom 및 ext/xsl의 콜백 개선

Niels Dossche는 callable을 사용할 수 있는 XSLTProcessor::registerPHPFunctions()DOMXPath::registerPhpFunctions() 메서드를 허용할 것을 제안했습니다.

📣 RFC: Change how JIT is disabled by default

RFC: JIT가 기본적으로 비활성화되는 방식 변경

현재 JIT는 tracing 모드에서 실행 중이지만 opcache.jit_buffer_size0으로 설정되면 기본적으로 비활성화됩니다. RFC에서는 opcache.jit=disable을 설정함으로써 기본적으로 JIT를 비활성화하고, 기본 jit_buffer_size 값을 64m로 늘릴 것을 제안합니다.

📣 RFC: Final anonymous classes

RFC: Final 익명 클래스

RFC에서는 익명 클래스 사용 환경을 개선하기 위한 세 가지 옵션 중 하나를 제안합니다:

  1. 최종 익명 클래스에 대한 지원 추가(new final class {} 구문, 호환성 유지).
  2. 또는 모든 익명 클래스를 최종 클래스로 만드는 옵션 없이 기본적으로 모든 익명 클래스를 최종 클래스로 만듭니다(호환성 깨짐).
  3. 또는 모든 익명 클래스를 기본적으로 최종 클래스로 만들고, 선택적 open 키워드를 제공하여 최종 클래스가 아닌 것으로 만듭니다(Kotlin에서와 같이, new open class {}, 호환성 깨짐).

📣 RFC: Property Hooks

RFC: 프로퍼티 훅
이 RFC에서 Ilija Tovillo와 Larry Garfield는 get/set 함수를 사용하여 가상 프로퍼티를 선언할 것을 제안합니다.

설계 및 구문은 Kotlin과 가장 유사하지만 C# 및 Swift의 영향도 받습니다.

class User implements Named
{
private bool $isModified = false;

public function __construct(private string $first, private string $last) {}

public string $fullName {
get => $this->first . " " . $this->last;

set($value) => [$this->first, $this->last] = explode(' ', $value);
}
}

이 RFC의 흥미로운 부작용은 인터페이스에서 추상 속성을 선언할 수 있다는 점입니다:

abstract class A
{
abstract public string $readable { get; }
abstract protected string $writeable { set; }
abstract protected string $both { get; set; }
}

class C extends A
{
public string $readable;
protected string $readable;
protected string $writeable {
set => $field = $value;
}
public string $both;
}

Sjon Hortensius 덕분에 이미 3v4l.org에서 프로퍼티 훅을 사용해 볼 수 있습니다.

그리고 RFC Vote에 피드백을 제공할 수도 있습니다: Property Hooks

Tools

  • php-tui/php-tui – 의사(pseudo) 그래픽 UI를 갖춘 PHP로 콘솔 애플리케이션을 만들기 위한 프레임워크.

  • Crell/Serde – PHP 8을 위한 강력한 직렬화/역직렬화 라이브러리.

  • pestphp/pest-plugin-stresslessgrafana/k6 위에 구축된 Pest용 스트레스 부하 테스트 플러그인. 소개 비디오 📺 Stressless: PHP를 위한 스트레스 테스트를 참조하세요.

  • buggregator/server – XHprof 프로파일러, Symfony VarDumper 서버, SMTP 서버, Sentry 호환 서버, Monolog 서버, HTTP 요청 덤프 서버 등 PHP 애플리케이션을 위한 다양한 디버깅 기능을 제공하는 경량의 독립형 서버입니다.
    보다 편리한 PHP 디버깅을 위한 콘솔 미니 서버 및 도우미인 buggregator/trap이 함께 제공됩니다.

  • NoiseByNorthwest/php-spx – 웹 UI가 내장된 간단하고 직관적인 PHP 프로파일링 확장 프로그램입니다.

  • reliforp/reli-prof – PHP로 작성된 PHP용 샘플링 프로파일러 또는 메모리 프로파일러로, 프로세스 외부에서 PHP VM 실행에 대한 정보를 읽습니다. 대상 스크립트를 변경하거나 확장을 로드하지 않고도 스크립트에서 성능 병목 현상이나 메모리 누수를 찾을 수 있습니다.
    또는 PHP용 메모리 프로파일러 확장 프로그램인 arnaud-lb/php-memory-profiler를 사용해 볼 수도 있습니다. PHP 스크립트에서 메모리 누수를 찾는 데 도움이 됩니다.

  • saloonphp/xml-wrangler – XML을 쉽게 읽고 쓸 수 있도록 설계된 간단한 PHP 라이브러리. veewee/xml도 확인해보세요 - PHP에서 XML로 걱정 없이 작업하는 데 필요한 모든 도구를 제공하는 패키지입니다.

  • jolicode/JoliMarkdown – 마크다운 콘텐츠를 위한 구문 수정기. 자세한 내용은 졸리마크다운 소개를 읽어보세요.

  • cerbero90/lazy-json – 프레임워크에 구애받지 않고 모든 차원과 소스의 JSON 파일을 Laravel 지연 컬렉션에 재귀적으로 로드하는 패키지입니다.

  • staabm/phpstan-baseline-analysis – PHPStan 기준 파일을 분석하고 집계된 오류 추세 보고서를 생성합니다.

  • spiral/json-schema-generator – DTO(데이터 전송 객체) 클래스에서 JSON 스키마를 생성하는 기능을 제공합니다.

Symfony

Laravel

Other Frameworks

기타

Fun

Conferences

앞으로 개최될 PHP 행사에 참석하여 발표를 신청해 보세요:

가까운 PHP 밋업이 언제 열리는지 궁금하다면 Tomas Votruba가 운영하는 멋진 밋업 애그리게이터 friendsofphp.org를 이용해 보세요. php.net에 캘린더도 있습니다.