PHP Annotated – January 2023

PHP Annotated 이미지

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

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


안녕하세요 여러분!

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

News

PHP 8.0.27, PHP 8.1.14, PHP 8.2.1 have been released

PHP 8.0.27, PHP 8.1.14, PHP 8.2.1이 릴리스되었습니다
. ⚠️️ 이들은 보안 수정 릴리스입니다.

What’s Next in PhpStorm: The 2023.1 Public Roadmap

PhpStorm의 새로운 기능: 2023.1 공개 로드맵

2023년 첫 번째 릴리스에서는 성능을 개선하고 더 빠른 인덱싱을 제공하고, 3v4l 통합을 추가하고, 제네릭에 대한 지원을 개선하고, PHPStan 및 Psalm 태그를 추가하고, multi-composer와 multi-vendor project에 대한 지원을 추가하는 것을 목표로 합니다.

PHP as WebAssembly and WASI modules

WebAssembly 및 WASI 모듈로서의 PHP.

VMware OCTO WasmLabs의 사람들은 WASI를 사용하여 PHP를 WebAssembly로 포팅하는 작업을 하고 있습니다. 이 개념은 새로운 것이 아니며 오래 전에 emscripten을 사용하여 PHP를 WebAssembly로 컴파일할 수 있었습니다.

그러나 이제 GitHub에 바로 사용할 수 있는 컴파일된 PHP Wasm 모듈(PHP 8.1, PHP 8.2)이 있기 때문에 훨씬 더 쉬워졌습니다.

다음은 몇 가지 흥미로운 사용 사례입니다.

그건 그렇고, WebAssembly로 구동되어 브라우저에서 실행되는 WP인 WordPress 놀이터를 확인하십시오.

VMware의 사람들은 PHP용 패치를 준비 했으며 WebAssembly가 애플리케이션 보안 및 배포(delivery)와 관련하여 제공하는 이점을 PythonRuby와 유사하게 PHP로 가져오는 데 매우 관심이 있다고 말했습니다.

PHP Core

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

✅ RFC: Dynamic class constant fetch

RFC: 동적 클래스 상수 가져오기.

PHP 8.3은 클래스 상수를 조회하기 위한 구문을 도입합니다.

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

// New syntax in PHP 8.3:
echo Foo::{$bar};

✅ RFC: More Appropriate Date/Time Exceptions

RFC: 더 적절한 날짜/시간 예외

PHP 8.3부터 날짜/시간 클래스를 사용할 때 무언가 잘못되면 PHP는 더 구체적인 예외를 발생시킵니다.
날짜/시간 함수의 절차적 스타일은 영향을 받지 않으며 현재와 같이 경고 및 오류를 계속 사용합니다.

📊 RFC: Asymmetric Visibility

RFC: 비대칭 가시성

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

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

현재 투표가 느리게 진행되고 있으며 기능이 2/3 임계값에 도달할 만큼 충분한 투표를 받지 못하고 있습니다.

RFC: SameSite 쿠키 속성 매개변수 추가 #PHP 8.3

George Peter Banyard는 모든 SameSite 관련 함수에 SameSite 매개변수를 추가할 것을 제안합니다.

SameSite 쿠키 속성에 대한 지원이 PHP 7.3에 추가되었습니다. (Same Site Cookie RFC)

그러나 선택한 값에 “samesite” 키가 정의된 옵션 배열을 전달해야만 설정할 수 있으며 이는 다른 모든 특성과 대조됩니다.

당시 RFC에서 SameSite 매개변수를 추가하자는 제안은 만장일치로 거절되었는데, 매개변수 추가에 반대하는 주요 주장 중 하나는 함수에 이미 6개의 선택적 매개변수가 있고 SameSite 특성을 설정하려면 다른 모든 선택적 매개변수를 제공해야 한다는 것입니다.

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false [, string $samesite = "" ]]]]]]] )
  • 당시 거절된 스타일

그러나 PHP 8.0에 명명된 인수가 도입되면서 더 이상 문제가 되지 않습니다.

이 RFC에서는 SameSite enum을 추가하고

enum SameSite {
case None;
case Lax;
case Strict;
}

SameSite $sameSite = SameSite::Lax parameter를 setcookie(), setrawcookie(), session_set_cookie_params()에 추가합니다.

A set of 18 functions/changes to improve PHP core

PHP 코어를 개선하기 위한 18가지 기능/변경 세트.

Thomas Hruska는 PHP 코어용으로 설계된 삶의 질 개선 기능 세트인 cubiclesoft/php-ext-qolfuncs를 구현했습니다.
이 세트에는 꽤 깔끔한 추가 기능이 있습니다. 몇가지를 언급하자면 str_splice(), str_realloc(), fread_mem(), is_reference(), refcount(). 공식적인 RFC로 볼 수 있기를 희망합니다.

Tools

amphp/amp 3.0.0

amphp/amp 3.0.0 – PHP 애플리케이션용 non-blocking 동시성 프레임워크가 major 업데이트 했습니다. 이제 Generators 대신 Fiber를 사용하는 코루틴을 기반으로 하며 revoltphp/event-loop를 사용합니다.

수많은 Amphp 생태계 패키지도 업데이트되었습니다. 다음은 몇 가지 예입니다: amphp/pipelineamphp/process.

PHP-DI 7.0

PHP-DI 7.0 – 이 종속성 주입 컨테이너 패키지에 대한 이 업데이트는 PHP 8.0+ 지원, #[Inject] attribute로 대체된 @Inject PHPDoc 주석, PSR-11 2.0 호환성 및 기타 개선 사항과 함께 제공됩니다.

php-ffi/var-dumper

php-ffi/var-dumper – 함수 dd()및 dump()로 FFI type을 dump할 수 있게 해주는 symfony/var-dumper의 래퍼.

olvlvl/composer-attribute-collector

olvlvl/composer-attribute-collector – PHP 8 속성 대상을 검색하는 편리하고 비용이 거의 들지 않는 방법입니다.

PHPCSStandards/PHPCSExtra

PHPCSStandards/PHPCSExtra – PHP_CodeSniffer와 함께 사용하기 위한 추가 규칙 모음입니다.

cerbero90/enum

cerbero90/enum – enum 기능을 강화하는 PHP 패키지입니다. 기본적으로 열거형에 추가하여 수많은 유용한 기능을 제공할 수 있는 특성입니다.

NoiseByNorthwest/php-spx

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

PXP

PXP – 확장된 구문 및 런타임 기능을 갖춘 PHP의 상위 집합(superset) 언어입니다.

Ryan ChandlerRust로 PHP 파서를 개발하면서 시작했습니다. 이 프로젝트는 상위 집합(superset) 언어에 대한 전체 아이디어로 성장했습니다.

이전에 PHP용 상위 집합(marcioAlmada/yay 또는 nunomaduro/plus-1)을 구축하려는 몇 가지 시도가 있었지만 이번 시도는 매우 유망해 보입니다.

외관상으로는 Rust에서 개발된 또 다른 유사한 시도가 있습니다:
Ara 프로그래밍 언어 – PHP로 직접 컴파일되는, 정적으로 타입이 지정되는(Statically Typed) 프로그래밍 언어입니다.

Symfony

POC of Clean Architecture with Symfony by Stefano Alletti.

Stefano Alletti의 Symfony를 사용한 Clean Architecture의 POC.

How To Build Activity Log Using Doctrine Events by Jarosław Szutkowski.

Jarosław Szutkowski의 Doctrine Event를 사용하여 활동 기록을 작성하는 방법.

Replacing manual API endpoints with API Platform 3 in a Symfony application by Loïc Vernet.

Loïc Vernet의 Symfony 애플리케이션에서 수동 API 엔드포인트를 API 플랫폼 3으로 대체합니다.

Laravel

How to improve initial page load time by deferring rendering Livewire components by Freek Van der Herten.

Freek Van der Herten의 Livewire 구성 요소 렌더링을 연기하여 초기 페이지 로드 시간을 개선하는 방법.

Standard API Responses With Laravel Responsables by Wendell Adriel.

Wendell Adriel의 Laravel Responsables를 사용한 표준 API 응답.

Laravel 11: release date and new features by Benjamin Crozat.

Benjamin Crozat의 Laravel 11: 릴리스 날짜와 새로운 기능.

Configuring Laravel Pint by Steve (King) McDougall.

Steve (King) McDougall의 Laravel Pint 구성.

Laravel Pint is an opinionated PHP code style fixer for minimalists

Automatic Docblock Generation on Facades by Paul Redmond.

Paul Redmond의 Facade에서 자동 Docblock 생성.

JhumanJ/OpnForm – Simple and open-source form builder.

JhumanJ/OpnForm – 간단한 오픈 소스 form 빌더.

Laravel Testing Video Course by Povilas Korop (Laravel Daily).

Povilas Korop(Laravel Daily)의 Laravel 테스트 비디오 코스.

기타

What is the minimum number of characters needed to run every possible program in Php?

Benoit Viguier(@b_viguier)의 트윗

재미있네요: (.,^’) 딱 6자 만으로 유효한 #PHP 코드 를 작성하는 새로운 트릭을 찾았습니다
🤯
예, 전혀 쓸모가 없습니다… 그래서 “재미있습니다” 😉

https://b-viguier.github.io/PhpFk/

Php에서 가능한 모든 프로그램을 실행하는 데 필요한 최소 문자 수는 얼마입니까?

이 글에서 Benoit Viguier는 다음 6개의 문자만으로 PHP 스크립트를 실제로 생성하는 방법을 설명합니다 : (.,^').

그는 그 마법을 자동화하는 도구를 만들었습니다 b-viguier/PhpFk.

PhpFk로 만든 “hello world”는 다음과 같습니다.

Hello World with only 6 characters 코드
최종 결과는 Hello World with only 6 characters.

PhpFuck에서 영감을 얻어 PHP 8+에서 동작하는 6개의 문자로만 이뤄진 코드를 만들었습니다. PhpFuck에서는 ' 문자도 필요 없었지만, warning이 발생하므로 추가할 수 밖에 없었다고 하네요.

PHP in 2023 by Brent.

Brent의 2023년 PHP.

My PHP enum style guide by Brent .

Brent의 나의 PHP enum 스타일 가이드.

PHP version stats: January, 2023 by Brent Roose.

Brent의 PHP 버전 통계: 2023년 1월

클라이언트가 packagist.org로 보내는 데이터(예: composer update 명령을 실행할 때)를 기반으로 사용되는 PHP 버전에 대한 정기적인 overview.

PHP 8.*은 클라이언트의 59.7%가 사용하고 있으며 PHP 7.*은 39.1%를 차지합니다. 작년에 각각 45.1%와 53.4%였던 것과 비교하면 PHP 8은 훌륭하게 성장하고 있습니다.

2.6 Million Domains and ~45,000 Exposed Phpinfo() by sdcat.

sdcat의 260만 개의 도메인과 45,000개 이상 노출되어 있는 Phpinfo().
작성자는 info.phpphpinfo.php와 같은 스크립트에 대해 2.6개의 도메인을 스캔했고 그 중 45,000개를 찾았습니다.

이 기사에서 phpinfo()를 노출하는 것이 위험한 이유를 알 수 있습니다.

From open redirect to RCE in one week by Anton Hrytskevich.

Anton Hrytskevich가 일주일 만에 공개 리디렉션에서 RCE로.

Keep Cognitive Complexity Low with PHPStan by Tomas Votruba.

Tomas Votruba의 PHPStan으로 인지 복잡성을 낮게 유지하십시오.

How to release PHP 8.1 and 7.2 package in the Same Repository by Tomas Votruba.

Tomas Votruba의 동일한 저장소에서 PHP 8.1 및 7.2 패키지를 릴리스하는 방법.

PHP Performance in 2022: A Year in Review by Benjamin Eberlei

Benjamin Eberlei의 2022년의 PHP 성능 : 연례 보고서 – Benjamin은 PHP 8.2에서 잘 알려지지 않은 몇 가지 성능 개선 사항을 공유합니다.
예를 들어, PHP 8.2에서 목록 배열은 Dmitry Stogov 덕분에 훨씬 더 메모리 효율적입니다.

100k 정수의 배열 목록을 생성 하는 테스트 스크립트는 메모리 사용량이 4,3MB에서 2,3MB로 감소했음을 보여줍니다.

php-pds/composer-script-name

php-pds/composer-script-name – 공개 리뷰에 사용할 수 있는 composer 스크립트 이름 지정에 대한 새로운 표준입니다.

Paul M. Jones는 철저한 조사를 수행 했으며 PHP 생태계에서 사용할 몇 가지 스크립트 이름을 제안했습니다 . test, test-coverage, test-*, cs-fix, analyze, check.

Compose a Developer Environment easily for PHP with Nix by Soner Sayakci.

Soner Sayakci의 Nix로 PHP용 개발자 환경을 쉽게 구성하십시오.

Video