ツールのタグ
ツールのタグ
よりスマートに、より高速に、未来のために構築。
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のブログで詳しく学べます。
var_dump ( $components [ 'host' ]);
// string(7) "php.net"
$uri = new Uri ( 'https://php.net/releases/8.5/en.php' );
var_dump ( $uri -> getHost ());
// string(7) "php.net"
パイプ演算子
パイプ演算子は、中間変数を扱わずに関数呼び出しを連鎖させることができます。これにより、多くの「ネストされた呼び出し」を前から順に読めるチェーンに置き換えることができます。
この機能の背景については、PHP Foundationのブログで詳しく学べます。
$slug = strtolower (
str_replace ( '.' , '' ,
str_replace ( ' ' , '-' ,
trim ( $title )
)
)
);
var_dump ( $slug );
// string(15) "php-85-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" パターンを簡単にサポートできます。
{
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 );
{
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) キャストを使用して、値が意図的に未使用であることを示すことができます。
{
return 'PHP 8.4' ;
}
getPhpVersion (); // No warning
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)
定数式におけるクロージャとファーストクラスコール可能
静的クロージャとファーストクラスコール可能は、定数式で使用できるようになりました。これには属性パラメータ、プロパティやパラメータのデフォルト値、および定数が含まれます。
{
#[ AccessControl (
new Expression ( 'request.user === post.getAuthor()' ),
)]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}
{
#[ 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 ハンドルを初期化するコストを回避できます。
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 );
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 が返され(?? 演算子と組み合わせやすくなります)、便利です。
? null
: $events [ array_key_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のソースダウンロードについては、をご覧ください ダウンロード ページ。 Windowsバイナリはにあります Windows用のPHP サイト。変更のリストはに記録されます 変更ログ.
The 移行ガイド PHPマニュアルで入手できます。新機能と後方に取得できない変更の詳細なリストについては、それを参照してください。



