新機能
PHP コア
定数式にクロージャ
定数式に、クロージャ や
第一級callable
を指定できるようになりました。
これらを指定できる箇所として、以下が挙げられます:
- アトリビュートの引数
- プロパティやパラメーターのデフォルト値
- 定数および、クラス定数
#[\NoDiscard] アトリビュート
関数の戻り値が重要であり、
その値を使うべきことを示すアトリビュートとして、
NoDiscard が追加されました。
また、値を意図的に使わないことを指示する (void)
キャストが追加されました。
(void) キャストは、
プログラムそのものの実行には影響しませんが、
#[\NoDiscard] アトリビュートが発生させる警告や、
外部の IDE や静的解析ツールが発生させる可能性がある、
診断メッセージを抑制する目的に使えます。
定数に対するアトリビュート
クラス定数でないコンパイル時定数
(例: define('MY_CONST', 1); ではなく、
const MY_CONST = 1; の形で定義するもの)
に対して、アトリビュートを指定できるようになりました。
定数に対して、Deprecated
アトリビュートを指定できるようになりました。
#[\DelayedTargetValidation] アトリビュート
無効なターゲットに指定した、
PHP コア(または拡張モジュール)
のアトリビュートから発生するコンパイル時エラーを抑制する手段として、
DelayedTargetValidation
アトリビュートが追加されました。
このアトリビュートが抑制したエラーは代わりに、
ReflectionAttribute::newInstance
がコールされたタイミングで、実行時に報告されます。
プロパティに対する #[\Override] 指定
プロパティに、Override
アトリビュートを指定できるようになりました。
static プロパティに対する、非対称可視性の指定
非対称可視性プロパティ が、static プロパティをサポートしました。
Fatal Error 発生時のバックトレース
(Maximum execution time exceeded のような) 致命的なエラーにも、
バックトレースが含まれるようになりました。
定数式をキャスト
定数式をキャストできるようになりました。
Clone キーワードへの変更
clone キーワード
は、関数のように振る舞うようになりました。
そして、読み取り専用プロパティに clone して値を再代入する際に、
新しく $withProperties
パラメータが使えるようになりました
cURL
複数のリクエストにまたがって持続する
CurlSharePersistentHandle
のサポートが追加されました。
これを使うと、より効率的な接続の再利用が安全にできるようになります。
curl_getinfo 関数に、
CURLINFO_USED_PROXY (libcurl >= 8.7.0),
CURLINFO_HTTPAUTH_USED (libcurl >= 8.12.0),
CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0)
のサポートが追加されました。
curl_getinfo が配列を返す場合、
これらの情報は "used_proxy",
"httpauth_used",
"proxyauth_used" というキーで利用できます。
CURLINFO_USED_PROXY は、
直近の転送でプロキシを使った場合にゼロでない値を、
使わなかった場合にゼロを返します。
CURLINFO_HTTPAUTH_USED と
CURLINFO_PROXYAUTH_USED は、
直近の転送で HTTP および、プロキシ経由の認証メソッドを示す情報を、
ビットマスクで返します。利用可能な値は、
CURLAUTH_*
を参照ください。
CURLOPT_INFILESIZE を安全に置き換えられる、
CURLOPT_INFILESIZE_LARGE が追加されました。
特定のシステムでは、たとえ 64bit システムであっても、
CURLOPT_INFILESIZE は 32bit の符号付き整数(2.0 Gib)
しか受け入れない場合があります。
CURLOPT_INFILESIZE_LARGE は、
システムが扱える整数の最大値を受け入れます。
curl_setopt 関数に指定する、
CURLOPT_FOLLOWLOCATION オプション向けに、
CURLFOLLOW_OBEYCODE,
CURLFOLLOW_FIRSTONLY,
CURLFOLLOW_ALL が追加されました。
CURLFOLLOW_OBEYCODE は、
許可されている場合に、より厳密にリダイレクトを行います。
CURLFOLLOW_FIRSTONLY は、
最初のリダイレクトのみを行います。そのため、
その後に後続のリダイレクトがあったとしても、それ以上はリダイレクトしません。
CURLFOLLOW_ALL は、
CURLOPT_FOLLOWLOCATION
を true に設定することと同じです。
curl_getinfo 関数に、
CURLINFO_CONN_ID
のサポートが追加されました (libcurl >= 8.2.0)。
この定数を使うと、
cURL の転送で使ったユニークな接続IDを取得できるようになります。
このIDは、主に PHP レベルでのアプリケーションにおいて、
接続の再利用や接続のプーリング処理が必要な場合に役立ちます。
curl_getinfoが配列を返す場合、
この値は "conn_id" キーとして利用できます。
curl_getinfo 関数に、
CURLINFO_QUEUE_TIME_T
のサポートが追加されました (libcurl >= 8.6.0)。
この定数を使うと、
リクエストが送信される前に libcurl
の接続キューで待機した時間(マイクロ秒単位)を取得できます。
curl_getinfo の option
パラメーターに CURLINFO_QUEUE_TIME_T
を渡すことで、値が取得できます。
TLS で使う署名アルゴリズムを指定する定数として、
CURLOPT_SSL_SIGNATURE_ALGORITHMS
が追加されました。
DOM
Dom\Element::$outerHTML が追加されました。
Dom\ParentNode の実装に、
$children プロパティが追加されました。
EXIF
OffsetTime* Exif タグが追加されました。
HEIF/HEIC のサポートが追加されました。
Filter
フィルタ関数に渡すと、
検証に失敗した際に強制的に例外を発生させる
FILTER_THROW_ON_FAILURE フラグが追加されました。
この新しいフラグは、
FILTER_NULL_ON_FAILURE と組み合わせることはできません。
組み合わせようとすると、
ValueError がスローされます。
Intl
様々な通貨関連の数値フォーマット向けに、
クラス定数 NumberFormatter::CURRENCY_ISO,
NumberFormatter::CURRENCY_PLURAL,
NumberFormatter::CASH_CURRENCY,
NumberFormatter::CURRENCY_STANDARD が追加されました。
指定されたロケールで likely tag を処理するために、
Locale::addLikelySubtags と
Locale::minimizeSubtags が追加されました。
IntlListFormatter クラスが追加されました。
これは、指定されたロケールで項目のリストをフォーマット、順序付け、
句読点を付ける操作を行うためのものです。
クラス定数として、IntlListFormatter::TYPE_AND,
IntlListFormatter::TYPE_OR,
IntlListFormatter::TYPE_UNITS 演算子と、
IntlListFormatter::WIDTH_WIDE,
IntlListFormatter::WIDTH_SHORT,
IntlListFormatter::WIDTH_NARROW があります。
このクラスは ICU 67 以降でサポートされます。
PDO_Sqlite
クラス定数
Pdo\Sqlite::ATTR_BUSY_STATEMENT が追加されました。
クラス定数
Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT,
Pdo\Sqlite::EXPLAIN_MODE_PREPARED,
Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN,
Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN が追加されました。
接続する際の属性として、
Pdo\Sqlite::ATTR_TRANSACTION_MODE を追加しました。
これに指定可能な値は、
Pdo\Sqlite::TRANSACTION_MODE_DEFERRED,
Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE,
Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE があります。
これを使うと、beginTransaction()
呼び出し時に使用するトランザクションモードを構成できます。
Session
session_set_cookie_params,
session_get_cookie_params,
session_start 関数は、
"partitioned" というキー経由で、
パーティショニングされた Cookie をサポートしました。
SOAP
SoapClient::__getTypes が、
列挙型の case をダンプするようになりました。
Soap 1.2 の Reason テキスト向けに、xml:lang 属性のサポートが追加されました。
上記のサポートによって、
SoapFault::__construct と
SoapServer::fault のシグネチャに、
オプションの $lang パラメータが追加されました。
これによって、.NET SOAP クライアントとの互換性問題が解決します。
Standard
mail は、sendmail の実際のエラーを返すようになり、
sendmail プロセスが予期せず終了したかどうかを検出するようになりました。
予期せず終了した場合、警告が発生し、この関数は false を返します。
これより前のバージョンでは、こうしたエラーは黙って無視されていました。
この変更は、sendmail を使ったメール送信にのみ影響します。
getimagesize が、HEIF/HEIC 画像をサポートしました。
libxml 拡張モジュールがロードされている場合に、
getimagesize は SVG 画像もサポートするようになりました。
同様に、image_type_to_extension と
image_type_to_mime_type も、
IMAGETYPE_SVG を処理するようになりました。
getimagesize が返す配列に、
2つエントリが追加されました: "width_unit" と
"height_unit" です。
これらは、寸法がどの単位で表現されているかを示します。
これらの単位は px がデフォルトですが、
必ずしも同じ単位であるとは限りません
(一例を挙げると、片方が cm で、もう片方が px である場合があります)
setcookie と setrawcookie
関数が、"partitioned" キーをサポートしました。
URI
RFC 3986 と WHATWG URL に従い、
URI と URL を処理するのに使える拡張モジュールが追加されました。
これは、常に有効になっています。
XSL
XSLTProcessor::getParameter,
XSLTProcessor::setParameter,
XSLTProcessor::removeParameter の
$namespace 引数は、
空でなくても動作するようになりました。
動作するのは、$name 引数が Clark 記法でなく、かつ
QName 形式でもない場合です。
これらの場合は、名前空間が href または prefix からそれぞれ取得されるためです。
Zlib
flock が、zlib ストリームをサポートしました。
これより前のバージョンでは、あらゆるロック操作を行う際に常に失敗していました。