GN⁺: PHP 8.4 릴리즈
(php.net)- 속성 훅, 비대칭 가시성, 업데이트된 DOM API, 성능 향상, 버그 수정 및 일반적인 정리가 포함
- IDE와 정적 분석 도구가 네이티브로 이해할 수 있는 계산 속성을 지원하는 속성 훅 제공
- 속성의 읽기와 쓰기 범위를 독립적으로 제어할 수 있는 비대칭 가시성 도입.
-
새로운 기능
-
#[\Deprecated]
속성을 통해 사용자 정의 함수, 메서드 및 클래스 상수에 PHP의 기존 사용 중단 메커니즘을 적용 가능. - 새로운 DOM API는 HTML5 문서 파싱을 위한 표준 준수 지원을 포함하며, DOM 기능의 여러 오래된 호환성 버그를 수정함.
-
BcMath\Number
객체를 사용하여 임의의 정밀도 숫자를 객체 지향적으로 처리 가능. -
array_find()
,array_find_key()
,array_any()
,array_all()
등의 새로운 배열 함수 제공. - PDO의 새로운 하위 클래스 Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, Pdo\Sqlite 제공.
- 새로 인스턴스화된 객체의 속성과 메서드를 괄호 없이 접근 가능.
-
-
새로운 클래스, 인터페이스 및 함수
- 새로운 Lazy Objects, IR Framework 기반의 JIT 구현.
-
request_parse_body()
함수,bcceil()
,bcdivmod()
,bcfloor()
,bcround()
함수 추가. -
DateTime::createFromTimestamp()
,DateTime::getMicrosecond()
,DateTime::setMicrosecond()
등의 메서드 추가. -
mb_trim()
,mb_ltrim()
,mb_rtrim()
,mb_ucfirst()
,mb_lcfirst()
함수 추가. -
pcntl_getcpu()
,pcntl_getcpuaffinity()
,pcntl_getqos_class()
,pcntl_setns()
,pcntl_waitid()
함수 추가. -
ReflectionClassConstant::isDeprecated()
,ReflectionGenerator::isClosed()
,ReflectionProperty::isDynamic()
메서드 추가. -
http_get_last_response_headers()
,http_clear_last_response_headers()
,fpow()
함수 추가. -
XMLReader::fromStream()
,XMLReader::fromUri()
,XMLReader::fromString()
,XMLWriter::toStream()
,XMLWriter::toUri()
,XMLWriter::toMemory()
메서드 추가. -
grapheme_str_split()
함수 추가.
-
사용 중단 및 호환성 깨짐
- IMAP, OCI8, PDO_OCI, pspell 확장 기능이 번들에서 제거되어 PECL로 이동됨.
- 암시적으로 nullable한 매개변수 유형이 사용 중단됨.
- 클래스 이름으로 _ 사용이 사용 중단됨.
- 0을 음수의 거듭제곱으로 올리는 것이 사용 중단됨.
- 잘못된 모드를 round()에 전달하면 ValueError 발생.
- 확장 기능의 클래스 상수가 이제 타입이 지정됨.
- GMP 클래스가 이제 final로 지정됨.
- MYSQLI 관련 상수와 함수가 사용 중단됨.
-
stream_bucket_make_writeable()
와stream_bucket_new()
가 이제 StreamBucket 인스턴스를 반환함. -
exit()
의 동작 변경. - E_STRICT 상수가 사용 중단됨.
-
성능 및 문법 개선
- 성능 향상, 문법 개선, 타입 안전성 향상.
- PHP 8.4로 업그레이드 권장.
Hacker News 의견
-
$this->countryCode
가 무한 재귀를 일으키지 않는 이유는 RFC에 명시되어 있음. PHP의 속성 접근이 맥락에 따라 다른 의미를 가질 수 있다는 점이 마법처럼 느껴짐.- 속성 접근이 메서드 호출로 변환되는 언어의 마법이 있음.
- PHP 사용자는 아니지만, 이러한 복잡성이 언어에 추가되는 것이 우려됨.
-
PHP 프로그래머로서 PHP의 방향성에 대해 걱정됨. 새로운 언어 기능들이 의심스러운 이득을 위해 언어 복잡성을 높임.
- 속성 후크는 속성 접근이 메서드 호출로 변환됨을 의미함.
- JS와 Perl에서 이와 유사한 기능을 사용했지만, 명시적인 메서드가 더 명확하고 확장하기 쉬움.
-
PHP가 여전히 번창하고 있음에 기쁨을 느낌. 2021년에는 Nikita Popov의 이탈로 걱정했지만, PHP는 여전히 좋은 언어로 많은 개발자들이 활동 중임.
-
속성 후크에 가장 기대됨. C#에서 그리웠던 기능임.
-
__get()
과__set()
을 사용해 흉내내기도 했지만, 이는 무겁고 많은 PHPDoc 주석이 필요했음.
-
-
배열 접근자 오버로딩을 보다가 "Property Hooks"를 발견함. 최근에 추가된 기능임을 알고 놀람.
- 다른 언어의 표현력과 문법적 설탕이 PHP에 도입된 것을 기쁘게 생각함.
-
PHP의 새로운 릴리스에 만족함. 클로저에 대한 더 나은 스택 추적, 성능 개선, HTML5 지원, 레이지 객체 등 많은 개선이 이루어짐.
-
bcmath 객체에 대해 기대됨. 산술 연산자보다는 래퍼 클래스 없이 데이터 타입 검사를 할 수 있게 된 점이 좋음.
-
PHP가 여전히 발전하고 있음에 기쁨. 프리랜서로 시작했을 때의 기억이 떠오름.
-
PHP의 새로운
array_find
함수는 언어 설계의 문제를 보여줌. 기존의array_search
와 유사하지만 인수 순서가 다름.- 다른 언어들이 이러한 함수를 가지고 있다는 이유로 PHP에도 추가되었지만, 대부분의 언어는 이를 전역 함수로 만들지 않음.
-
"public private(set)"이 이해되지 않음. "readonly public"이 더 적절해 보임.
- Swift의
private(set)
과 유사해 보임.
- Swift의