検索
  • サインイン
  • サインアップ
パスワードのリセットが成功しました

興味のあるプロジェクトをフォローし、それらに関する最新ニュースをチェックしてください

その他の変更ログ

よりスマートに、より高速に、未来のために構築。

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() 関数に渡すことでプロパティを更新できるようになりました。これにより、readonly クラスの "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 文をコロンではなくセミコロンで終了することは非推奨です。
  • array のオフセットとして 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バイナリはにあります Windows用のPHP サイト。変更のリストはに記録されます 変更ログ.

The 移行ガイド PHPマニュアルで入手できます。新機能と後方に取得できない変更の詳細なリストについては、それを参照してください。