찾다
  • 로그인
  • 가입
비밀번호 재설정 성공

당신이 관심을 갖고 있는 프로젝트를 팔로우하고 그들에 관한 최신 뉴스를 맛보세요

추가 변경 로그

더 스마트하게, 더 빠르게, 내일을 위해 만들어졌습니다.

PHP 8.5는 PHP 언어의 주요 업데이트입니다, URI 확장, 파이프 연산자, 클로닝 시 속성 수정 지원 등 새로운 기능 포함

지금 PHP 8.5로 업그레이드하세요!

URI 확장

새로운 항상 사용 가능한 URI 확장은 RFC 3986 및 WHATWG URL 표준에 따라 URI와 URL을 안전하게 분석하고 수정할 수 있는 API를 제공합니다.

uriparser (RFC 3986) 및 Lexbor (WHATWG URL) 라이브러리로 구동됩니다.

이 기능의 배경에 대한 자세한 내용은 PHP Foundation 블로그에서 확인하세요.

PHP < 8.5
$components = parse_url ( 'https://php.net/releases/8.5/en.php' );

var_dump ( $components [ 'host' ]);
// string(7) "php.net"
PHP 8.5
use Uri\Rfc3986\Uri ;

$uri = new Uri ( 'https://php.net/releases/8.5/en.php' );

var_dump ( $uri -> getHost ());
// string(7) "php.net"

파이프 연산자

파이프 연산자는 중간 변수를 다루지 않고 함수 호출을 연결할 수 있습니다. 이를 통해 많은 "중첩 호출"을 앞으로 읽을 수 있는 체인으로 대체할 수 있습니다.

이 기능의 배경에 대한 자세한 내용은 PHP Foundation 블로그에서 확인하세요.

PHP < 8.5
$title = ' PHP 8.5 Released ' ;

$slug = strtolower (
str_replace ( '.' , '' ,
str_replace ( ' ' , '-' ,
trim ( $title )
)
)
);

var_dump ( $slug );
// string(15) "php-85-released"
PHP 8.5
$title = ' PHP 8.5 Released ' ;

$slug = $title
|> trim (...)
|> (fn( $str ) => str_replace ( ' ' , '-' , $str ))
|> (fn( $str ) => str_replace ( '.' , '' , $str ))
|> strtolower (...);

var_dump ( $slug );
// string(15) "php-85-released"

속성 포함 클론

이제 clone() 함수에 연관 배열을 전달하여 객체 클로닝 중에 속성을 업데이트할 수 있습니다. 이를 통해 읽기 전용 클래스의 "with-er" 패턴을 쉽게 지원할 수 있습니다.

PHP < 8.5
readonly class Color
{
public function __construct (
public int $red ,
public int $green ,
public int $blue ,
public int $alpha = 255 ,
) {}

public function withAlpha ( int $alpha ): self
{
$values = get_object_vars ( $this );
$values [ 'alpha' ] = $alpha

; return new self (... $values );
}
}

$blue = new Color ( 79 , 91 , 147 );
$transparentBlue = $blue -> withAlpha ( 128 );
PHP 8.5
readonly class Color
{
public function __construct (
public int $red ,
public int $green ,
public int $blue ,
public int $alpha = 255 ,
) {}

public function withAlpha ( int $alpha ): self
{
return clone( $this , [
'alpha' => $alpha ,
]);
}
}

$blue = new Color ( 79 , 91 , 147 );
$transparentBlue = $blue -> withAlpha ( 128 );

#[\NoDiscard] 기인하다

함수에 #[\NoDiscard] 속성을 추가하면, PHP는 반환값이 사용되었는지 확인하고 사용되지 않은 경우 경고를 표시합니다. 이를 통해 반환값이 중요한 API에서 실수로 반환값을 사용하지 않는 경우의 안전성을 향상시킬 수 있습니다.

관련된 (void) 캐스트를 사용하여 값이 의도적으로 사용되지 않았음을 표시할 수 있습니다.

PHP < 8.5
function getPhpVersion (): string
{
return 'PHP 8.4' ;
}

getPhpVersion (); // No warning
PHP 8.5
#[ \NoDiscard ]
function getPhpVersion (): string
{
return 'PHP 8.5' ;
}

getPhpVersion ();
// Warning: The return value of function getPhpVersion() should
// either be used or intentionally ignored by casting it as (void)

상수 표현식에서의 클로저와 퍼스트 클래스 콜러블

이제 정적 클로저와 퍼스트 클래스 콜러블을 상수 표현식에서 사용할 수 있습니다. 여기에는 속성 매개변수, 속성 및 매개변수의 기본값, 상수가 포함됩니다.

PHP < 8.5
final class PostsController
{
#[ AccessControl (
new Expression ( 'request.user === post.getAuthor()' ),
)]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}
PHP 8.5
final class PostsController
{
#[ AccessControl (static function (
Request $request ,
Post $post ,
): bool {
return $request -> user === $post -> getAuthor ();
})]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}

영구적인 cURL 공유 핸들

curl_share_init()와 달리, curl_share_init_persistent()로 생성된 핸들은 PHP 요청이 끝날 때 파괴되지 않습니다. 동일한 공유 옵션을 가진 영구 공유 핸들이 발견되면 재사용되어 매번 cURL 핸들을 초기화하는 비용을 줄일 수 있습니다.

PHP < 8.5
$sh = curl_share_init ();
curl_share_setopt ( $sh , CURLSHOPT_SHARE , CURL_LOCK_DATA_DNS );
curl_share_setopt ( $sh , CURLSHOPT_SHARE , CURL_LOCK_DATA_CONNECT );

$ch = curl_init ( 'https://php.net/' );

curl_setopt ( $ch , CURLOPT_SHARE , $sh );

curl_exec ( $ch );
PHP 8.5
$sh = curl_share_init_persistent ([
CURL_LOCK_DATA_DNS ,
CURL_LOCK_DATA_CONNECT ,
]);

$ch = curl_init ( 'https://php.net/' );
curl_setopt ( $ch , CURLOPT_SHARE , $sh );

// This may now reuse the connection from an earlier SAPI request
curl_exec ( $ch );

array_first() 및 array_last() 함수

array_first() 및 array_last() 함수는 각각 배열의 첫 번째 또는 마지막 값을 반환합니다. 배열이 비어 있으면 null이 반환되며(?? 연산자와 쉽게 결합 가능), 편리합니다。

PHP < 8.5
$lastEvent = $events === []
? null
: $events [ array_key_last ( $events )];
PHP 8.5
$lastEvent = array_last ( $events );

추가 기능 및 개선 사항

  • 치명적인 오류(예: 최대 실행 시간 초과)에는 이제 백트레이스가 포함됩니다.
  • 속성은 이제 상수를 대상으로 할 수 있습니다.
  • #[\Override] 속성은 이제 프로퍼티에 적용할 수 있습니다.
  • #[\Deprecated] 속성은 트레이트와 상수에 사용할 수 있습니다.
  • 정적 속성은 이제 비대칭 가시성을 지원합니다.
  • 생성자 속성 승격을 사용하여 속성을 final로 표시할 수 있습니다.
  • 익명 함수의 재귀를 단순화하기 위해 Closure::getCurrent() 메서드를 추가했습니다.
  • setcookie() 및 setrawcookie() 함수는 이제 "partitioned" 키를 지원합니다.
  • 새로운 get_error_handler() 및 get_exception_handler() 함수가 제공됩니다.
  • 새로운 Dom\Element::getElementsByClassName() 및 Dom\Element::insertAdjacentHTML() 메서드가 제공됩니다.
  • grapheme_levenshtein() 함수를 추가했습니다.
  • 새로운 #[\DelayedTargetValidation] 속성은 잘못된 대상에서 사용되는 핵심 및 확장 속성의 컴파일 시간 오류를 억제하는 데 사용할 수 있습니다.

지원 중단 및 이전 버전과의 호환성 중단

  • 백틱 연산자는 shell_exec()의 별칭으로 더 이상 권장되지 않습니다.
  • 비표준 캐스트 이름(boolean, integer, double, binary)은 더 이상 권장되지 않습니다. 대신 각각 (bool), (int), (float), (string)을 사용하세요.
  • disable_classes INI 설정은 엔진의 다양한 가정이 깨질 수 있어 제거되었습니다.
  • case 문을 콜론 대신 세미콜론으로 종료하는 것은 더 이상 권장되지 않습니다.
  • null을 배열 오프셋으로 사용하거나 array_key_exists() 호출 시 사용하는 것은 더 이상 권장되지 않습니다. 대신 빈 문자열을 사용하세요.
  • class_alias()에서 "array"와 "callable"을 클래스 별칭으로 사용하는 것은 더 이상 불가능합니다.
  • __sleep() 및 __wakeup() 매직 메서드는 소프트 비권장 상태입니다. 대신 __serialize() 및 __unserialize()를 사용하세요.
  • NAN을 다른 타입으로 캐스팅할 때 경고가 발생합니다.
  • null 이외의 배열이 아닌 값을 [] 또는 list()로 구조 분해하면 경고가 발생합니다.
  • float(또는 float처럼 보이는 문자열)를 int로 변환할 수 없으면 경고가 발생합니다.
더 나은 성능, 더 나은 구문, 향상된 유형 안전성. 지금 PHP 8.5로 업그레이드하세요!

PHP 8.5의 출처 다운로드는 다음을 방문하십시오 다운로드 페이지. Windows Binaries는에서 찾을 수 있습니다 Windows 용 PHP 대지. 변경 목록은 다음에 기록되어 있습니다 변경 로그.

그만큼 마이그레이션 가이드 PHP 매뉴얼에서 사용할 수 있습니다. 새로운 기능의 자세한 목록과 뒤로 호환되지 않는 변경 사항을 보려면이 문의하십시오.