1. 1. News
    1. 1.1. PHP 8.2.0 Alpha 2 and PHP 8.2.0 Alpha 3 have been released
    2. 1.2. PHP 8.0.21 and PHP 8.1.8 have been released
    3. 1.3. PHP Foundation Update, June 2022
    4. 1.4. php.net redesign is being discussed
    5. 1.5. A popular async framework for PHP ReactPHP turned 10
    6. 1.6. Is PHP dead?
  2. 2. PHP Core
    1. 2.1. ✅ RFC: Disjunctive Normal Form Types #PHP 8.2
    2. 2.2. ✅ RFC: Fetch properties of enums in const expressions #PHP 8.2
    3. 2.3. ✅ RFC: Random Extension Improvement #PHP 8.2
    4. 2.4. ✅ RFC: Make the iterator_*() family accept all iterables #PHP 8.2.
    5. 2.5. ✅ RFC: Constants in Traits #PHP 8.2
    6. 2.6. ❌ RFC: New Curl URL API
    7. 2.7. ❌ RFC: json_encode indentation
    8. 2.8. ❌ RFC: Stricter implicit boolean coercions
    9. 2.9. ❌ RFC: Create a global login system for php.net
    10. 2.10. ❌ RFC: Short Closures 2.0
    11. 2.11. 🤔 RFC: Auto-implement Stringable for string backed enums
    12. 2.12. 🤔 RFC: PDO driver specific sub-classes
    13. 2.13. 💡 RFC: Unify PHP’s typing modes (aka remove strict_type declare)
  3. 3. Tools
    1. 3.1. laravel/pint
    2. 3.2. DaveLiddament/php-language-extensions
    3. 3.3. RobiNN1/phpCacheAdmin
    4. 3.4. thecodingmachine/safe
    5. 3.5. cerbero90/enum
    6. 3.6. PrinsFrank/standards
    7. 3.7. soatok/cupcake
    8. 3.8. T-Regx/T-Regx
    9. 3.9. deComplex.me
    10. 3.10. PiotrPress/wordpress-hooks
    11. 3.11. markrogoyski/itertools-php
    12. 3.12. Composer 2.4 will be released later this year
  4. 4. Symfony
    1. 4.1. Launched ux.symfony.com and released 4 New UX Components.
    2. 4.2. Twig Smoke Rendering
  5. 5. Laravel
    1. 5.1. Vite is now the default frontend asset bundler in new Laravel projects
    2. 5.2. hammerstonedev/sidecar
    3. 5.3. calebporzio/parental
    4. 5.4. spatie/laravel-onboard
    5. 5.5. zgabievi/laravel-promocodes
    6. 5.6. abrouter/laravel-abtest
    7. 5.7. Running PHPStan on max with Laravel by Steve McDougall.
    8. 5.8. Add comments to SQL queries made by Laravel by Freek Van der Herten.
    9. 5.9. Containerizing Laravel Applications by Matt Casperson.
  6. 6. 기타
    1. 6.1. The very useful variadic argument by Damien Seguy.
    2. 6.2. 5 ways to give a name to your booleans by Damien Seguy.
    3. 6.3. Top 100 PHP classes that you should know by Damien Seguy.
    4. 6.4. PHP version stats: July, 2022 by Brent Roose.
    5. 6.5. 5 Pitfalls of Upgrade to Native PHP Enums and How to Avoid Them by Tomas Votruba.
    6. 6.6. On the use of enums by Larry Garfield – When should you use PHP enums, and when shouldn’t you?
    7. 6.7. Effective immutability with PHPStan by Matthias Noback – DateTimeImmutable is actually mutable.
    8. 6.8. Benchmarking serialization by Larry Garfield.
    9. 6.9. Decoupling your security user from your user model by Matthias Noback.
    10. 6.10. Complete guide for PHP & Neo4j and using graph databases by Michal Štefaňák.
    11. 6.11. How to automatically add return type declarations with Rector and without breaking your code.
    12. 6.12. PHP-FPM tuning: Using ‘pm static’ for max performance by Hayden James.
    13. 6.13. How can I trust my test suite? by Antonello D’Ippolito.
  7. 7. 오디오/비디오
  8. 8. Community

PHP Annotated – July 2022

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에 승인되었습니다. 결합 및 교차 유형을 혼합할 수 있습니다.

1
2
3
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 속성을 가져올 수 있습니다.

1
2
3
4
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)로 확장됩니다.

1
2
3
4
5
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에 상수를 정의할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
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 함수 모음.

1
2
3
4
5
6
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/

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

1
2
3
4
5
6
7
8
9
10
11
12
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으로 전환하고
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum Comparison {
    case STRICT;
    case LOOSE;
    }

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

    foo(true);
    goo(Comparison::STRICT);
  • named parameter를 사용하고
    1
    $v = in_array($needle, $haystack, strict: true); 
  • dummy 할당(assignation)을 사용하고
    1
    $v = in_array($needle, $haystack, $strict = true); 
  • comment를 활용
    1
    $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은 실제로 변경 가능합니다.

1
2
3
4
5
$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 비석


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