diff --git a/appendices/migration84.xml b/appendices/migration84.xml new file mode 100644 index 0000000000..541ad0f04b --- /dev/null +++ b/appendices/migration84.xml @@ -0,0 +1,54 @@ + + + + + + PHP 8.3.x から PHP 8.4.x への移行 + + + この新しいマイナーバージョンには、たくさんの 新機能 と 互換性のない変更がいくつか あります。実運用環境の PHP をこのバージョンにあげる前に、これらの変更を必ずテストすべきです。 + + + + &manual.migration.seealso; + 7.1.x, + 7.2.x, + 7.3.x, + 7.4.x, + 8.0.x, + 8.1.x, + 8.2.x, + 8.3.x. + + + &appendices.migration84.new-features; + &appendices.migration84.new-classes; + &appendices.migration84.new-functions; + &appendices.migration84.constants; + &appendices.migration84.incompatible; + &appendices.migration84.deprecated; + &appendices.migration84.removed-extensions; + &appendices.migration84.other-changes; + &appendices.migration84.windows-support; + + + diff --git a/appendices/migration84/constants.xml b/appendices/migration84/constants.xml new file mode 100644 index 0000000000..c149912748 --- /dev/null +++ b/appendices/migration84/constants.xml @@ -0,0 +1,340 @@ + + + + + + 新しいグローバル定数 + + + PHP コア + + + + PHP_OUTPUT_HANDLER_PROCESSED + + + PHP_SBINDIR + + + + + + cURL + + + + CURL_HTTP_VERSION_3 + + + CURL_HTTP_VERSION_3ONLY + + + CURL_TCP_KEEPCNT + + + CURLOPT_PREREQFUNCTION + + + CURL_PREREQFUNC_OK + + + CURL_PREREQFUNC_ABORT + + + CURLOPT_SERVER_RESPONSE_TIMEOUT + + + CURLOPT_DEBUGFUNCTION + + + CURLINFO_TEXT + + + CURLINFO_HEADER_IN + + + CURLINFO_DATA_IN + + + CURLINFO_DATA_OUT + + + CURLINFO_SSL_DATA_OUT + + + CURLINFO_SSL_DATA_IN + + + CURLINFO_POSTTRANSFER_TIME_T + + + + + + Intl + + + + PATTERN + (IntlDateFormatter) + + + PROPERTY_IDS_UNARY_OPERATOR + (IntlChar) + + + PROPERTY_ID_COMPAT_MATH_START + + + + PROPERTY_ID_COMPAT_MATH_CONTINUE + + + + + + + LDAP + + + + LDAP_OPT_X_TLS_PROTOCOL_MAX + + + LDAP_OPT_X_TLS_PROTOCOL_TLS1_3 + + + + + + libxml + + + + LIBXML_RECOVER + + + LIBXML_NO_XXE + これは、外部エンティティの読み込みを許可せず + エンティティの置換を行うために、 + LIBXML_NOENTと一緒に使用されます。 + この定数はlibxml2 2.13から利用可能です。 + + + + + + MySQLi + + + + MYSQLI_TYPE_VECTOR + + + + + + OpenSSL + + + X509_PURPOSE_OCSP_HELPER + X509_PURPOSE_TIMESTAMP_SIGN + + + + + PCNTL + + + + SIGCKPT (DragonFlyBSDのみ) + + + SIGCKPTEXIT (DragonFlyBSDのみ) + + + WEXITED + + + WSTOPPED + + + WNOWAIT + + + P_ALL + + + P_PID + + + P_PGID + + + P_PIDFD (Linuxのみ) + + + P_UID (NetBSD/FreeBSDのみ) + + + P_GID (NetBSD/FreeBSDのみ) + + + P_SID (NetBSD/FreeBSDのみ) + + + P_JAILID (FreeBSDのみ) + + + + + + PGSQL + + + PGSQL_TUPLES_CHUNK + + + + + POSIX + + + POSIX_SC_CHILD_MAX + POSIX_SC_CLK_TCK + + + + + Sockets + + + サポートされている場合、次のソケットオプションが新たに定義されます: + + + + + SO_EXCLUSIVEADDRUSE (Windowsのみ) + + + SOCK_CONN_DGRAM (NetBSDのみ) + + + SOCK_DCCP (NetBSDのみ) + + + TCP_SYNCNT (Linuxのみ) + + + SO_EXCLBIND (Solaris/Illumosのみ) + + + SO_NOSIGPIPE(macOSおよびFreeBSD) + + + SO_LINGER_SEC (macOSのみ) + + + IP_PORTRANGE (FreeBSD/NetBSD/OpenBSDのみ) + + + IP_PORTRANGE_DEFAULT (FreeBSD/NetBSD/OpenBSDのみ) + + + IP_PORTRANGE_HIGH (FreeBSD/NetBSD/OpenBSDのみ) + + + IP_PORTRANGE_LOW (FreeBSD/NetBSD/OpenBSDのみ) + + + SOCK_NONBLOCK + + + SOCK_CLOEXEC + + + SO_BINDTOIFINDEX + + + + + + Sodium + + + + SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES + + + SODIUM_CRYPTO_AEAD_AEGIS128L_NSECBYTES + + + SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES + + + SODIUM_CRYPTO_AEAD_AEGIS128L_ABYTES + + + SODIUM_CRYPTO_AEAD_AEGIS256_KEYBYTES + + + SODIUM_CRYPTO_AEAD_AEGIS256_NSECBYTES + + + SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES + + + SODIUM_CRYPTO_AEAD_AEGIS256_ABYTES + + + + + + Tokenizer + + + T_PUBLIC_SET + + + T_PROTECTED_SET + + + T_PRIVATE_SET + + + + + + XML + + + + XML_OPTION_PARSE_HUGE + xml_parseや + xml_parse_into_struct + を使用して大きな入力を解析することを可能にします。 + + + + + + diff --git a/appendices/migration84/deprecated.xml b/appendices/migration84/deprecated.xml new file mode 100644 index 0000000000..21cfcb20da --- /dev/null +++ b/appendices/migration84/deprecated.xml @@ -0,0 +1,494 @@ + + + + + + PHP 8.4.x で推奨されなくなる機能 + + + PHP コア + + + + 暗黙的な nullable パラメータ + + + パラメータのデフォルト値が &null; の場合、 + その型は暗黙的に null を受け入れるように拡張されます。 + + + + 次のコードは: + + + + + + このように: + + + + + + またはこのように修正する必要があります。 + + + + + + + + + しかし、そのようなパラメータ宣言の後に必須パラメータが続く場合: + + + + + + このように: + + + + + + またはこのように修正する必要があります。 + + + + + + なぜなら、必須パラメータの前に任意パラメータを置くことは非推奨だからです。 + + + + + + ゼロを負の数でべき乗 + + + ある数の負のべき乗は、 + その数の正のべき乗の逆数と同等です。 + 例えば、10-2 は + 1 / 102 と同等です。 + つまり、0の負のべき乗は + 0 で割ることを意味します。例えば、 + 0-2 は + 1 / 02、または + 1 / 0 となります。以上より、この動作は非推奨とされました。 + + + + これはべき乗演算子 ** と + pow 関数に影響します。 + + + + IEEE 754 のセマンティクスが必要な場合は、新しい + fpow 関数を使用してください。 + + + + + + クラス名をアンダースコア <literal>_</literal> とする + + + クラス名を _ とすることは、現在非推奨となっています: + + + + + + + + + + クラス名がアンダースコアで始まるのは、 + 非推奨ではありません: + + + + + + + + + + + + + <function>trigger_error</function> で + <constant>E_USER_ERROR</constant> を使用 + + + + trigger_error で + error_level として + E_USER_ERROR を指定するのは非推奨となりました。 + + + + そのような場合、例外をスローするか、 + exit を呼び出すように修正すべきです。 + + + + + + + <constant>E_STRICT</constant> 定数 + + + + E_STRICT エラーレベルが削除されたため、 + この定数は非推奨となりました。 + + + + + + cURL + + + CURLOPT_BINARYTRANSFER 定数は非推奨となりました。 + + + + + Date + + + DatePeriod::__construct(string $isostr, int $options = 0) の + シグネチャは非推奨となりました。 + 代わりに DatePeriod::createFromISO8601String を使用してください。 + + + + + SUNFUNCS_RET_TIMESTAMP、 + SUNFUNCS_RET_STRING、 + および SUNFUNCS_RET_DOUBLE 定数は非推奨となりました。 + これは PHP 8.1.0 で date_sunset と + date_sunrise 関数が非推奨となったことに伴うものです。 + + + + + DBA + + + + dba_key_split に &null; または &false; を渡すことは + 非推奨となりました。 + これらの場合、常に &false; を返していました。 + + + + + DOM + + + + DOM_PHP_ERR 定数は非推奨となりました。 + + + + + 以下のプロパティは正式に非推奨となりました: + + DOMDocument::$actualEncoding + DOMDocument::$config + DOMEntity::$actualEncoding + DOMEntity::$encoding + DOMEntity::$version + + + + + + Hash + + + + ハッシュ関数に無効なオプションを渡すことは非推奨となりました。 + + + + + Intl + + + intlcal_set または + IntlCalendar::set + を 2 つを超える引数で呼び出すことは非推奨となりました。 + 代わりに IntlCalendar::setDate または + IntlCalendar::setDateTime を使用してください。 + + + + intlgregcal_create_instance または + IntlGregorianCalendar::__construct + を 2 つを超える引数で呼び出すことは非推奨となりました。 + 代わりに IntlGregorianCalendar::createFromDate または + IntlGregorianCalendar::createFromDateTime を使用してください。 + + + + + LDAP + + + ldap_connect を + 2 つを超える引数で呼び出すことは非推奨となりました。 + 代わりに ldap_connect_wallet を使用してください。 + + + + ldap_exop + を 4 つを超える引数で呼び出すことは非推奨となりました。 + 代わりに ldap_exop_sync を使用してください。 + + + + + MySQLi + + + + mysqli_ping 関数および + mysqli::ping メソッドは、 + PHP 8.2.0 で再接続機能が削除されたため、非推奨となりました。 + + + + + mysqli_kill 関数および + mysqli::kill メソッド + は非推奨となりました。 + この機能が必要な場合は、代わりに SQL の KILL + コマンドを使用できます。 + + + + + mysqli_refresh 関数および + mysqli::refresh メソッドは + 非推奨となりました。 + この機能が必要な場合は、代わりに SQL の FLUSH コマンド + を使用できます。 + すべての MYSQLI_REFRESH_* + 定数も非推奨となりました。 + + + + + mysqli_store_result に + mode パラメータを明示的に渡すことは非推奨となりました。 + この関数のために用意されていたMYSQLI_STORE_RESULT_COPY_DATA 定数も + 非推奨となりました。 + + + + + PDO_PGSQL + + + ドル記号で囲まれた文字列の中で + エスケープされた疑問符(??)を使用することは非推奨となりました。 + PDO_PGSQL はドル記号で囲まれた文字列をサポートする独自の SQL パーサーを持つようになったため、 + それらの中で疑問符をエスケープする必要はなくなりました。 + + + + + PGSQL + + + pg_fetch_result、 + pg_field_prtlen、 + および pg_field_is_null の 2 引数のシグネチャは非推奨となりました。 + 代わりに row を &null; に設定した 3 引数のシグネチャを + 使用してください。 + + + + + Random + + + + lcg_value は非推奨となりました。 + この関数は複数の点で問題があるためです。 + 代わりに Random\Randomizer::getFloat を使用してください。 + + + + + Reflection + + + ReflectionMethod::__construct を + 1 つの引数で呼び出すことは非推奨となりました。 + 代わりに ReflectionMethod::createFromMethodName を使用してください。 + + + + + Session + + + session_set_save_handler を + 2 つを超える引数で呼び出すことは非推奨となりました。 + 2 引数のシグネチャを使用してください。 + + + + + session.sid_length および + session.sid_bits_per_character + の INI 設定値を変更することは非推奨となりました。 + セッションストレージバックエンドを修正し、 16 進数 32 文字による + セッション ID を受け入れるようにし、これら 2 つの INI 設定を変更するのをやめてください。 + + + + + session.use_only_cookies、 + session.use_trans_sid、 + session.trans_sid_tags、 + session.trans_sid_hosts、および + session.referer_check + の INI 設定値を変更することは非推奨となりました。 + SID 定数も非推奨となりました。 + + + + + SOAP + + + + SoapServer::addFunction に + int を渡すことは非推奨となりました。 + すべての PHP 関数を提供する必要がある場合は、 + get_defined_functions が返す配列をフラット化してください。 + + + + + SOAP_FUNCTIONS_ALL 定数は非推奨となりました。 + + + + + SPL + + + SplFixedArray::__wakeup メソッドは + 非推奨となりました。代わりに + SplFixedArray::__serialize と + SplFixedArray::__unserialize + をオーバーライドしてください。 + + + + + SplFileObject::setCsvControl、 + SplFileObject::fputcsv、および + SplFileObject::fgetcsv で + escape パラメータのデフォルト値を利用することは非推奨となりました。 + + 引数または名前付き引数で明示的に指定する必要があります。 + これは、SplFileObject::setCsvControl で + 新しいデフォルト値を設定した場合、SplFileObject::fputcsv および + SplFileObject::fgetcsv には適用されません。 + + + + + Standard + + + stream_context_set_option を + 2 つの引数で呼び出すことは非推奨となりました。 + 代わりに stream_context_set_options を使用してください。 + + + + + unserialize で大文字の S タグを使用して文字列を + アンシリアライズすることは非推奨となりました。 + + + + + fputcsv、 + fgetcsv、および + str_getcsv の + escape パラメータのデフォルト値を利用することは非推奨となりました。 + + 引数または名前付き引数で明示的に指定する必要があります。 + + + + + XML + + + + xml_set_object 関数は非推奨となりました。 + + + + + callable でない文字列を + xml_set_* + 関数に渡すことは非推奨となりました。 + + + + + diff --git a/appendices/migration84/incompatible.xml b/appendices/migration84/incompatible.xml new file mode 100644 index 0000000000..94cf4a8b9b --- /dev/null +++ b/appendices/migration84/incompatible.xml @@ -0,0 +1,839 @@ + + + + + + 下位互換性のない変更点 + + + このセクションで明示的に述べられていなくても、 + 新しい関数、 + クラス、インターフェイス、列挙型、 + または定数は、 + 再宣言によるErrorがスローされる可能性があります。 + + + + PHP コア + + + + <function>exit</function> の動作の変更 + + + exit (およびdie) + 言語構造は、関数のように振る舞います。 + これにより、callableとして渡すことができ、 + + strict_types 宣言の影響を受け、 + 任意の非整数値を文字列にキャストする代わりに、通常の型強制を行います。 + + + + そのため、exit および die に + 無効な型を渡すと、一貫してTypeError が + スローされるようになりました。 + + + + + 比較中の再帰 + + + 比較中に再帰が発生すると、 + E_ERROR の致命的なエラーの代わりに、 + Error 例外がスローされるようになりました。 + + + + + readonly プロパティの間接的な変更 + + + + __clone() 内で readonly プロパティを間接的に変更することは、 + もはや許可されなくなりました。例えば、$ref = &$this->readonly のようなコードです。 + これは readonly の初期化時にはすでに禁止されており、 + 「クローン時の readonly の再初期化」の実装における見落としでした。 + + + + + 定数の型の変更 + + + PHP_DEBUG および PHP_ZTS 定数の型が、 + int から bool に変更されました。 + + + + + 一時ファイル名の長さ + + + アップロードされたファイルや tempnam 関数で作成されるファイルの名前は、 + 以前より13バイト長くなりました。 + 総合的な長さは引き続きプラットフォーム依存です。 + + + + + + <constant>E_STRICT</constant> エラーレベルの削除 + + + E_STRICT エラーレベルは、 + PHPエンジン内で使用されなくなったため削除されました。 + E_STRICT 定数は非推奨となりました。 + + + + + + 型が追加された拡張クラスの定数 + + + 以下の拡張クラスは、定数に型が宣言されました: + + Date + Intl + PDO + Reflection + SPL + Sqlite + XMLReader + + + + + + + リソースからオブジェクトへの移行 + + + いくつかの &resource; が &object; に移行されました。 + is_resource を使用した戻り値のチェックは、 + 特に指定がない限り、&false; かどうかを確認するように置き換える必要があります。 + + + + DBA + + + DBA 関数は、 + dba_connection &resource; の代わりに + Dba\Connection オブジェクトを受け取り、返すようになりました。 + + + + + ODBC + + + ODBC 関数は、 + odbc_result &resource; の代わりに + Odbc\Result オブジェクトを受け取り、返すようになりました。 + + + + ODBC 関数は、 + odbc_connection &resource; の代わりに + Odbc\Connection オブジェクトを受け取り、返すようになりました。 + + + + + SOAP + + + SoapClient::$httpurl プロパティは、 + soap_url &resource; の代わりに + Soap\Url オブジェクトになりました。 + is_resource を使用したチェック + (例: is_resource($client->httpurl))は、 + &null; かどうかのチェック(例: $client->httpurl !== null)に置き換える必要があります。 + + + SoapClient::$sdl プロパティは、 + soap_sdl &resource; の代わりに + Soap\Sdl オブジェクトになりました。 + is_resource を使用したチェック + (例: is_resource($client->sdl))は、 + &null; かどうかのチェック(例: $client->sdl !== null)に置き換える必要があります。 + + + + + + 新しい警告と例外 + + + プログラミングエラー、つまり無効な値が引数として提供された場合にトリガーされる + 新しい警告と例外が追加されました。 + + + + cURL + + + curl_multi_select は、 + timeout パラメータが 0 未満または + PHP_INT_MAX を超える場合、 + ValueError をスローするようになりました。 + + + + + GD + + + + imagejpeg + imagewebp + imagepng + imageavif + + は、無効な quality が渡された場合、 + ValueError をスローするようになりました。 + + + + imageavif は、 + 無効な speed パラメータ値が渡された場合、 + ValueError をスローするようになりました。 + + + + imagescale は、 + width または height パラメータが + アンダーフロー/オーバーフローした場合、 + ValueError をスローするようになりました。 + + + + imagescale は、 + 無効な mode パラメータ値が渡された場合、 + ValueError をスローするようになりました。 + + + + imagefilter は、 + IMG_FILTER_SCATTER フィルタで、 + sub または plus パラメータが + アンダーフロー/オーバーフローした場合、 + ValueError をスローするようになりました。 + + + + + Gettext + + + + bind_textdomain_codeset + textdomain + d*gettext + + は、domain が空文字列の場合、 + ValueError をスローするようになりました。 + + + + + Intl + + + resourcebundle_get、 + ResourceBundle::get、および + ResourceBundle オブジェクトでのオフセットアクセスは、 + 以下の場合に例外をスローするようになりました: + + + 無効なオフセット型の場合、TypeError + + + 空の &string; の場合、ValueError + + + 整数インデックスが符号付き32ビット整数に収まらない場合、 + ValueError + + + + + + IntlDateFormatter::__construct は、 + locale が無効な場合、 + ValueError をスローするようになりました。 + + + + NumberFormatter::__construct は、 + locale が無効な場合、 + ValueError をスローするようになりました。 + + + + + MBString + + + mb_encode_numericentity および + mb_decode_numericentity は、 + map が &integer; のみで構成されているかをチェックし、 + そうでない場合 ValueError をスローするようになりました。 + + + + mb_http_input は、 + type が無効な場合、常に + ValueError をスローするようになりました。 + + + + mb_http_output は、 + encoding にヌルバイトが含まれていないかをチェックし、 + 含まれている場合 ValueError をスローするようになりました。 + + + + + ODBC + + + odbc_fetch_row は、 + row0 以下の場合、 + &false; を返すようになりました。この場合、警告が発せられます。 + + + + + PCNTL + + + pcntl_sigprocmask、 + pcntl_sigwaitinfo、および + pcntl_sigtimedwait 関数は、次の場合エラーをスローするようになりました: + + + signals 配列が空の場合、 + ValueError + (pcntl_sigprocmask で + modeSIG_SETMASK のときを除く) + + + signals 配列の値が &integer; でない場合、 + TypeError + + + signals 配列の値が有効なシグナル番号でない場合、 + ValueError + + + + + + pcntl_sigprocmask 関数は、 + modeSIG_BLOCK、 + SIG_UNBLOCKSIG_SETMASK のいずれでもない場合、 + ValueError をスローするようになりました。 + + + + pcntl_sigtimedwait 関数は、次の場合エラーをスローするようになりました: + + + seconds0 未満の場合、 + ValueError + + + nanoseconds0 未満 + または 1e9 を超える場合、 + ValueError + + + seconds および nanoseconds が両方とも + 0 の場合、ValueError + + + + + + + SimpleXML + + + simplexml_import_dom に非XMLオブジェクトを渡すと、 + ValueError の代わりに + TypeError をスローするようになりました。 + + + + + Standard + + + round 関数は、 mode の値を検証し、 + 無効なモードの場合、ValueError をスローするようになりました。 + 以前は、無効なモードは PHP_ROUND_HALF_UP と解釈されていました。 + + + + str_getcsv は、 + separator および enclosure 引数が + 1バイトの長さでない場合、または escape 引数が + 1バイトの長さでないか空文字列でない場合、 + ValueError をスローするようになりました。 + これは、fputcsv および fgetcsv の動作と + 同じになるように合わせたものです。 + + + + php_uname 関数は、 + mode が無効な場合、 + ValueError をスローするようになりました。 + + + + unserialize の + "allowed_classes" オプションは、 + クラス名の array でない場合、 + TypeError および + ValueError をスローするようになりました。 + + + + + XMLReader + + + 無効な文字エンコーディングを + XMLReader::open または + XMLReader::XML に渡すと、 + ValueError をスローするようになりました。 + + + + ヌルバイトを含む &string; を渡すと、以前は警告が発せられていましたが、 + 現在は ValueError をスローするようになりました。 + + + + + XMLWriter + + + ヌルバイトを含む &string; を渡すと、以前は警告が発せられていましたが、 + 現在は ValueError をスローするようになりました。 + + + + + XSL + + + XSLTProcessor::setParameter は、 + 引数にヌルバイトが含まれる場合、ValueError をスローするようになりました。 + これは、そもそも正しく動作していませんでした。 + + + + XSLTProcessor::importStyleSheet に + 非XMLオブジェクトを渡すと、ValueError の代わりに + TypeError がスローされるようになりました。 + + + + + 評価中にPHP関数コールバックの呼び出しに失敗した場合、 + 警告の発生ではなく、例外がスローされるようになりました。 + + + + + + DOM + + + 一部のDOMメソッドは、新しいノードを割り当てられない場合、以前は + &false; を返すか、DOM_PHP_ERR コードの + DOMException をスローしていました。 + これらは現在、一貫して DOM_INVALID_STATE_ERR コードの + DOMException をスローするようになりました。 + この状況は極めてまれであり、影響を受ける可能性は低いです。 + その結果、DOMImplementation::createDocument は、 + + 戻り値の型が、以前の DOMDocument|false から + DOMDocument になりました。 + + + + 以前は、DOMXPath オブジェクトをクローンできましたが、 + 返されるオブジェクトは使用できませんでした。 + これはもはや可能ではなく、DOMXPath オブジェクトをクローンすると、 + Error がスローされるようになりました。 + + + + + DOMImplementation::getFeature メソッドは削除されました。 + + + + + GMP + + + + GMP クラスは final になり、継承できなくなりました。 + + + + + MBString + + + 無効な文字列(エンコーディングエラーを含む)に対して、 + mb_substr は他の多くの mbstring 関数と同様に、 + 文字インデックスを解釈するようになりました。 + これにより、mb_strpos が返す文字インデックスを + mb_substr に渡すことができます。 + + + + SJIS-Mac(MacJapanese) 文字列の場合、mb_substr + に渡される文字インデックスは、文字列が Unicode に変換されたときに生成される + Unicode コードポイントのインデックスを参照します。 + これは、 SJIS-Mac の約40文字が複数の Unicode コードポイントの + シーケンスに変換されることによる重要な処理です。 + + + + + MySQLi + + + 未使用でドキュメント化されていない定数 + MYSQLI_SET_CHARSET_DIR は削除されました。 + + + + MYSQLI_STMT_ATTR_PREFETCH_ROWS 定数は削除されました。 + この機能は mysqlnd では利用できません。 + + + + MYSQLI_CURSOR_TYPE_FOR_UPDATE および + MYSQLI_CURSOR_TYPE_SCROLLABLE 定数は + 削除されました。この機能は mysqlnd および libmysql のどちらでも + 実装されていませんでした。 + + + + 未使用の MYSQLI_TYPE_INTERVAL 定数は、 + 現在は MYSQLI_TYPE_ENUM のエイリアスであり、削除されました。 + + + + + + MySQLnd + + + MySQL サーバーの待機タイムアウトに対して報告されるエラーコードは、 + MySQL サーバーバージョン 8.0.24 以降で + 2006 から 4031 に変更されました。 + + + + + Opcache + + + 64ビットアーキテクチャ上での + opcache.interned_strings_buffer + 設定の最大値は 32767 になりました。 + 以前は 4095 でした。 + + + + JIT + + + JIT のデフォルトの設定値は、 + opcache.jit=tracing + および opcache.jit_buffer_size=0 + から、 opcache.jit=disable および + opcache.jit_buffer_size=64M にそれぞれ変更されました。 + + + + これはデフォルトの動作には影響しません。 + JIT は引き続きデフォルトで無効になっています。 + ただし、 + opcache.jit_buffer_size ではなく、 + opcache.jit を通じて無効化されています。 + これは、以前に + opcache.jit_buffer_size + のみを使用して JIT を有効にし、 + opcache.jit + を使用してJIT モードを指定していなかったユーザーに影響を与える可能性があります。 + JIT コンパイルを有効にするには、 + opcache.jit の設定値を適切に設定してください。 + + + + JIT コンパイルが有効になっている場合、 + JIT コンパイラの初期化に何らかの理由で失敗すると、 + PHP は起動時に致命的なエラーで終了するようになりました。 + + + + + + PCNTL + + + pcntl_sigprocmask、 + pcntl_sigwaitinfo、 + および pcntl_sigtimedwait 関数は、 + 失敗時に常に &false; を返すようになりました。 + 以前は場合によっては -1 を返すことがありました。 + + + + + PCRE + + + バンドルされた pcre2lib はバージョン 10.44 に更新されました。 + その結果、{,3} はテキストとしてではなく + 量指定子として認識されるようになりました。 + さらに、UCP モードでの一部の文字クラスの意味が変更されました。 + 完全な変更ログは PCRE2 Changelog を + 参照してください。 + + + + + PDO_DBLIB + + + Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER および + Pdo\Dblib::ATTR_DATETIME_CONVERT 属性は、 + 整数属性の代わりにブール属性として動作するようになりました。 + したがって、PDO::setAttribute を介して属性を設定し、 + PDO::getAttribute を介して取得する場合、 + bool を期待または返却します。 + + + + + PDO_FIREBIRD + + + PDO::ATTR_AUTOCOMMIT 属性は、 + 整数属性の代わりにブール属性として動作するようになりました。 + したがって、PDO::setAttribute を介して属性を設定し、 + PDO::getAttribute を介して取得する場合、 + bool を期待または返却します。 + + + + この拡張モジュールはいくつかの Firebird C++ API を公開するようになったため、 + この拡張モジュールをビルドするには C++ コンパイラが必要になりました。 + さらに、この拡張モジュールは fbclient 3.0 以上にでコンパイルする必要があります。 + + + + + PDO_MYSQL + + + PDO::ATTR_AUTOCOMMIT、 + PDO::ATTR_EMULATE_PREPARES、 + PDO::MYSQL_ATTR_DIRECT_QUERY 属性は、 + 整数属性の代わりにブール属性として動作するようになりました。 + したがって、PDO::setAttribute を介して属性を設定し、 + PDO::getAttribute を介して取得する場合、 + bool を期待または返却します。 + + + + + PDO_PGSQL + + + DSN に認証情報が設定されている場合、PDO コンストラクタの引数よりも優先されるようになり、 + ドキュメントの記述に近くなりました。 + + + + + SimpleXML + + + SimpleXMLElement は XML 要素の + 表現であるだけでなく、RecursiveIterator でもあります。 + PHP 8.4.0 より前では、一部のメソッド(例: + SimpleXMLElement::asXML や + SimpleXMLElement::getName)および + それらのインスタンスの &string; へのキャストすると、 + 暗黙的にイテレータをリセットしていました。 + + + これはイテレータが巻き戻されるため、予期しない無限ループを引き起こす可能性がありました。 + 例えば: + + +123"; +$xml = simplexml_load_string($xmlString); + +$nodes = $xml->a->b; +foreach ($nodes as $nodeData) { + echo "nodeData: " . $nodeData . "\n"; + + $xml = $nodes->asXml(); +} + +]]> + + + これは無限ループを引き起こしていました。 + + + + + + しかし、この動作は修正され、 + SimpleXMLElement は明示的に巻き戻されない限り、 + イテレータをリセットしなくなりました。 + つまり、前述の例は現在では次のようになります: + + + + + + + + + + + SOAP + + + SoapClient::$typemap は、resource ではなく + array になりました。 + is_resource を使用したチェック + (例: is_resource($client->typemap))は、 + &null; かどうかのチェック(例: $client->typemap !== null)に置き換える必要があります。 + + + + SOAP 拡張モジュールには、session 拡張モジュールへの + オプションの依存関係が追加されました。 + PHP が session 拡張モジュールなしでビルドされ、かつ + 構成フラグが有効になっている場合、 + SOAP 拡張モジュールも使用していると、 + 起動時にエラーが発生します。 + これを解決するには、rtld-now を使用しないか、session 拡張モジュールを読み込んでください。 + + + + + Standard + + + strcspn で + characters に空文字列を指定すると + 文字列の長さが返されるようになりました。 + 以前は、最初のヌルバイトで誤って停止していました。 + + + + + http_build_query は、Backed Enumを正しく処理するようになりました。 + + + + + stream_bucket_make_writeable および + stream_bucket_new は、 + stdClass のインスタンスではなく、 + StreamBucket のインスタンスを返すようになりました。 + + + + + Tidy + + + コンストラクタでの失敗時に、警告を発して壊れたオブジェクトになるのではなく、 + 例外をスローするようになりました。 + + + + + XML + + + xml_set_*_handler + 関数は、handler パラメータに対して + callablestringnull の + 有効なシグネチャを宣言し、チェックするようになりました。 + さらに、xml_set_object で設定されたオブジェクトのメソッド名に対応する + string 型の値は、事前に渡されたオブジェクトのクラス上にメソッドが存在するかどうかが + チェックされるようになりました。 + 従って、xml_set_object は、 + callable メソッドを設定する前に呼び出す必要があります。 + ハンドラを無効にするために空文字列を渡すことは引き続き許可されていますが、 + 非推奨となりました。 + + + + しかし、xml_set_object と + callable でない文字列を渡すことは非推奨です。 + そのようなインスタンスをメソッドを直接参照する callable に + 変更することをお勧めします。 + + + + + diff --git a/appendices/migration84/new-classes.xml b/appendices/migration84/new-classes.xml new file mode 100644 index 0000000000..8e57a9d2c3 --- /dev/null +++ b/appendices/migration84/new-classes.xml @@ -0,0 +1,167 @@ + + + + + + 新しいクラス、列挙型、インターフェイス + + + Core + + Deprecated + RequestParseBodyException + + + + + BCMath + + BcMath\Number + + + + + DBA + + Dba\Connection + + + + + DOM + + Dom\HTMLDocument + Dom\XMLDocument + Dom\Document + Dom\ParentNode + Dom\ChildNode + Dom\Implementation + Dom\Node + Dom\NodeList + Dom\NamedNodeMap + Dom\DtdNamedNodeMap + Dom\HTMLCollection + Dom\AdjacentPosition + Dom\Element + Dom\HTMLElement + Dom\Attr + Dom\CharacterData + Dom\Text + Dom\CDATASection + Dom\ProcessingInstruction + Dom\Comment + Dom\DocumentType + Dom\DocumentFragment + Dom\Entity + Dom\EntityReference + Dom\Notation + Dom\TokenList + Dom\NamespaceInfo + Dom\XPath + + + + + ODBC + + Odbc\Connection + Odbc\Result + + + + + PCNTL + + + Pcntl\QosClass (macOSのみ) + + + + + PDO_DBLIB + + Pdo\DbLib + + + + + PDO_FIREBIRD + + Pdo\Firebird + + + + + PDO_MYSQL + + Pdo\Mysql + + + + + PDO_ODBC + + Pdo\Odbc + + + + + PDO_PGSQL + + Pdo\Pgsql + + + + + PDO_SQLITE + + Pdo\Sqlite + + + + + Reflection + + ReflectionConstant + + + + + SOAP + + Soap\Url + Soap\Sdl + + + + + Standard + + + + RoundingMode + StreamBucket + + + + + diff --git a/appendices/migration84/new-features.xml b/appendices/migration84/new-features.xml new file mode 100644 index 0000000000..2d581408bd --- /dev/null +++ b/appendices/migration84/new-features.xml @@ -0,0 +1,616 @@ + + + + + + 新機能 + + + + PHP コア + + + + プロパティフック + + + オブジェクトのプロパティは、 + get および set 操作に + 追加のロジックを関連付けることができるようになりました。 + 使用方法に応じてそのプロパティは、値を持つ場合もありますし、 + 仮想的、つまり値を持たない場合もあります。 + + + + + $this->firstName . ' ' . $this->lastName; + } + + // すべての書き込み操作はこのフックを通り、返却値が書き込まれます。 + // 読み取りアクセスは通常通り行われます。 + public string $firstName { + set => ucfirst(strtolower($value)); + } + + // すべての書き込み操作はこのフックを通り、フックの中で値が書き込まれます。 + // 読み取りアクセスは通常通り行われます。 + public string $lastName { + set { + if (strlen($value) < 2) { + throw new \InvalidArgumentException('Too short'); + } + $this->lastName = $value; + } + } +} + +$p = new Person(); + +$p->firstName = 'peter'; +print $p->firstName; // Prints "Peter" +$p->lastName = 'Peterson'; +print $p->fullName; // Prints "Peter Peterson" +]]> + + + + + + + 非対称可視性プロパティ + + + オブジェクトのプロパティは、set の可視性を get の可視性とは別に制御できるようになりました。 + + + +name = $name; + } +} +]]> + + + + + + + レイジーオブジェクト + + アクセスされるまで初期化が延期されるオブジェクトを作成できるようになりました。 + ライブラリやフレームワークは、これらのレイジーオブジェクトを利用して、 + 初期化に必要なデータや依存関係の取得を遅延させることができます。 + + + +__construct($data); +}; + +$reflector = new ReflectionClass(Example::class); +$object = $reflector->newLazyGhost($initializer); +]]> + + + + + + + <code>#[\Deprecated]</code> アトリビュート + + + 新しい Deprecated 属性を使用して、関数、メソッド、 + およびクラス定数を非推奨としてマークできます。このアトリビュートで非推奨となった機能の動作は、 + PHP 自身が提供する既存の非推奨メカニズムの動作と一致します。 + 唯一の例外は、発生するエラーコードが + E_DEPRECATED ではなく E_USER_DEPRECATED であることです。 + + + + PHP 自身が提供する機能の既存の非推奨は、この属性を使用するように更新され、 + 短い説明を含むことでエラーメッセージが改善されました。 + + + + + + POST 以外の HTTP リクエストでの RFC1867 (マルチパート)リクエストの解析 + + + + POST 以外の HTTP リクエストで RFC1867(マルチパート)リクエストを解析するための + request_parse_body 関数が追加されました。 + + + + + + 括弧なしでの &new; 式のチェーン + + + + コンストラクタ引数を持つ &new; 式は直接参照できるようになり、 + 式を括弧で囲むことなくメソッド呼び出しや + プロパティアクセスなどのチェーンが可能になりました。 + + + + + <classname>WeakReference</classname> のデバッグ情報の改善 + + + + WeakReference のデバッグ情報を取得すると、 + 参照しているオブジェクト、または参照が無効になっている場合は + &null; が出力されるようになりました。 + + + + + <classname>Closure</classname> のデバッグ情報の改善 + + + + Closure::__debugInfo の出力には、 + Closure の名前、ファイル名、および行が含まれるようになりました。 + + + + + + 異なる名前空間ブロックで同一のシンボルを定義 + + + + 名前空間を終了すると、そこで定義されたシンボルがクリアされるようになりました。 + これにより、以前の名前空間ブロックで同じ名前のシンボルが宣言されていても、 + 名前空間ブロック内でシンボルを使用できるようになりました。 + + + + + + + + cURL + + + curl_version は、新たに + feature_list 値を返すようになりました。これは、 + 既知のすべての cURL 機能と、それらがサポートされているか(&true;)されていないか + (&false;)を示す連想配列です。 + + + + CURLOPT_HTTP_VERSION のオプションとして、 + CURL_HTTP_VERSION_3 および + CURL_HTTP_VERSION_3ONLY 定数 + (libcurl 7.66 および 7.88 から利用可能) + が追加されました。 + + + + cURL オプションとしてCURLOPT_PREREQFUNCTION が追加されました。 + 接続が確立された後、リクエストが送信される前に呼び出される + callable を受け入れます。 + この callable は、リクエストを許可または中止するために CURL_PREREQFUNC_OK または + CURL_PREREQFUNC_ABORT のいずれかを返す必要があります。 + + + + CURLOPT_SERVER_RESPONSE_TIMEOUT が追加されました。 + これは以前は CURLOPT_FTP_RESPONSE_TIMEOUT として知られていました。 + 両方の定数は同じ値を持ちます。 + + + + cURL オプションとして CURLOPT_DEBUGFUNCTION が追加されました。 + リクエストの実行中に呼び出される callable を受け入れます。 + この callable は、CurlHandle オブジェクト、 + デバッグメッセージの種類を含む整数、 + およびデバッグメッセージを含む文字列を受け取ります。 + デバッグメッセージの種類は、次の定数のいずれかです: + + CURLINFO_TEXT + CURLINFO_HEADER_IN + CURLINFO_HEADER_OUT + CURLINFO_DATA_IN + CURLINFO_DATA_OUT + CURLINFO_SSL_DATA_IN + CURLINFO_SSL_DATA_OUT + + このオプションを設定した場合、CURLINFO_HEADER_OUT を設定してはいけません。 + 同じ libcurl の機能を使用するためです。 + + + + curl_getinfo は、新たに + posttransfer_time_us キーを返すようになりました。 + これは、開始から最後のバイトが送信されるまでのマイクロ秒数を示します。 + リダイレクトが行われた場合、各リクエストの時間が合計されます。 + この値は、curl_getinfo の + option パラメータに + CURLINFO_POSTTRANSFER_TIME_T を渡すことでも取得できます。 + libcurl 8.10.0 以降が必要です。 + + + + + DOM + + + + + Dom 名前空間と、既存の DOM クラスに対応する + 新たなクラスが追加されました(例: Dom\Node は + DOMNode に対応する新しいクラスです)。 + これらのクラスは HTML 5 に対応しており、WHATWG の仕様に準拠しています。 + これは DOM 拡張の長年のバグを解決します。 + 従来の DOM クラスも後方互換性のために引き続き利用可能です。 + + + + DOMNode::compareDocumentPosition + と関連する定数が追加されました: + + DOMNode::DOCUMENT_POSITION_DISCONNECTED + DOMNode::DOCUMENT_POSITION_PRECEDING + DOMNode::DOCUMENT_POSITION_FOLLOWING + DOMNode::DOCUMENT_POSITION_CONTAINS + DOMNode::DOCUMENT_POSITION_CONTAINED_BY + DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + + + + + + DOMXPath::registerPhpFunctions + に任意の callable を渡すことが可能になりました。 + + さらに、DOMXPath::registerPhpFunctionNs により、 + php:function('name') ではなく、ネイティブな関数呼び出し構文で + コールバックを登録できるようになりました。 + + + + + Intl + + + NumberFormatter::ROUND_HALFODD が追加されました。 + 既存の NumberFormatter::ROUND_HALFEVEN 機能を + 補完します。 + + + + + OpenSSL + + + Curve25519 および Curve448 ベースのキーのサポートが追加されました。 + 具体的には、x25519、ed25519、x448、ed448 フィールドが + openssl_pkey_new、 + openssl_pkey_get_details、 + openssl_sign、および + openssl_verify を、サポートするよう拡張されました。 + + + + パスワードのハッシュ方法として PASSWORD_ARGON2 が実装されました。 + これは OpenSSL 3.2 および NTS ビルドが必要です。 + + + + + PCRE + + + 同梱の pcre2lib がバージョン 10.44 に更新されました。 + これにより、LoongArch JIT サポートが追加され、 + Perl 互換のアイテムで波括弧間のスペースが許可され、 + 可変長の後読みアサーションがサポートされるようになりました。 + + + + pcre2lib バージョン 10.44 では、名前付きキャプチャグループの最大長が + 32 から 128 に変更されました。 + + + + r (PCRE2_EXTRA_CASELESS_RESTRICT) + 修飾子と (?r) モード修飾子のサポートされました。 + 大文字・小文字を区別しない修飾子 (i) と一緒に有効にすると、 + ASCII と非 ASCII 文字の混在が禁止されます。 + + + + + PDO + + + + ドライバ固有のサブクラスのサポートが追加されました。 + PDO のサブクラスを追加することで、 + データベース固有の機能のサポートを向上します。 + 新しいクラスは、PDO::connect メソッドを呼び出すか、 + ドライバ固有のサブクラスを直接インスタンス化することで + 利用できます。 + + + + + ドライバ固有の SQL パーサーのサポートが追加されました。 + デフォルトのパーサーは以下をサポートします: + + + シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ + + + 2 つのハイフンとネストされていない C スタイルのコメント + + + + + + + PDO_MYSQL + + + + 以下をサポートするカスタムパーサーが追加されました: + + + シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化やバックスラッシュによる + エスケープ + + + バッククオートで囲まれたリテラルでのクオートの二重化によるエスケープ + + + 1 つの空白が続く 2 つのハイフン、ネストされていない C スタイルのコメント、 + # によるコメント + + + + + + + PDO_PGSQL + + + + 以下をサポートするカスタムパーサーが追加されました: + + + シングルクオートやダブルクオートで囲まれたリテラルでのクオートの二重化によるエスケープ + + + C スタイルの「エスケープ」文字列リテラル (E'string') + + + ドル記号で囲まれた文字列リテラル + + + 2 つのハイフンとネストされていない C スタイルのコメント + + + ? 演算子のエスケープシーケンスとしての ?? のサポート + + + + + + + PDO_SQLITE + + + + 以下をサポートするカスタムパーサーが追加されました: + + + シングルクオート、ダブルクオート、バッククオートで囲まれたリテラルでのクオートの二重化による + エスケープ + + + 識別子の角括弧によるクオート + + + 2 つのハイフンとネストされていない C スタイルのコメント + + + + + + + Phar + + + Zip アーカイブの Unix タイムスタンプ拡張のサポートが追加されました。 + + + + + Readfile + + + PHP_HISTFILE 環境変数を利用し + .php_history パスを変更する機能が追加されました。 + + + + + Reflection + + + ReflectionAttribute に + デバッグ体験を向上させるための name プロパティが追加されました。 + + + + ReflectionClassConstant::__toStringおよび + ReflectionProperty::__toString は、 + 添付されたドキュメントコメントを返すようになりました。 + + + + + レイジーオブジェクト機能に関連する複数の新しいメソッドと定数が + 追加されました: + + + + ReflectionClass::newLazyGhost + + + ReflectionClass::newLazyProxy + + + ReflectionClass::resetAsLazyGhost + + + ReflectionClass::resetAsLazyProxy + + + ReflectionClass::isUninitializedLazyObject + + + ReflectionClass::initializeLazyObject + + + ReflectionClass::markLazyObjectAsInitialized + + + ReflectionClass::getLazyInitializer + + + ReflectionProperty::skipLazyInitialization + + + ReflectionProperty::setRawValueWithoutLazyInitialization + + + ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE + + + ReflectionClass::SKIP_DESTRUCTOR + + + + + + + SOAP + + + クラスマップでの名前空間のクラーク式記法のサポートが追加されました。 + クラスマップ内でクラーク式記法を使用して、 + 特定の名前空間の型を特定のクラスに解決するエントリを指定できるようになりました。 + 例: '{http://example.com}foo' => 'FooClass' + + + + DateTimeInterface のインスタンスが + xsd:datetime や類似の要素に渡されると、 + 空の文字列としてではなく、そのままシリアライズされるようになりました。 + + + + 持続的セッションが共有セッションモジュールで動作するようになりました。 + + + + + Standard + + + + + RoundingMode 列挙型が追加されました。 + PHP_ROUND_* 定数より + 明確な名前と発見性を提供します。 + さらに、4 つの新しい丸めモードが追加されました。これらは + RoundingMode 列挙型を介してのみ利用可能です。 + + + + + XSL + + + シングルクオートとダブルクオートの両方を含むパラメータを + 使用できるようになりました。 + + + + + XSLTProcessor::registerPhpFunctions に + 任意の callable を渡すことが可能になりました。 + + + + + XSLTProcessor::$maxTemplateDepth および + XSLTProcessor::$maxTemplateVars が追加されました。 + XSL テンプレート評価の再帰の深さを制御することができます。 + + + + + Zip + + + ZipArchive::ER_TRUNCATED_ZIP + 定数が追加されました。これは libzip 1.11 で追加されました。 + + + + + diff --git a/appendices/migration84/new-functions.xml b/appendices/migration84/new-functions.xml new file mode 100644 index 0000000000..34b1c91da6 --- /dev/null +++ b/appendices/migration84/new-functions.xml @@ -0,0 +1,334 @@ + + + + + + 新しく追加された関数 + + + PHP コア + + + + request_parse_body + + + + + BCMath + + + + + bcceil + bcdivmod + bcfloor + bcround + + + + + Date + + + DateTime::createFromTimestamp + + + DateTime::getMicrosecond + + + DateTime::setMicrosecond + + + DateTimeImmutable::createFromTimestamp + + + DateTimeImmutable::getMicrosecond + + + DateTimeImmutable::setMicrosecond + + + + + + DOM + + + DOMNode::compareDocumentPosition + + + + DOMXPath::registerPhpFunctionNS + + + DOMXPath::quote + + + DOMNode::compareDocumentPosition + + + + + + Hash + + + HashContext::__debugInfo + + + + + + Intl + + + IntlDateFormatter::getIanaID + + intltz_get_iana_id + + IntlDateFormatter::parseToCalendar + + + SpoofChecker::setAllowedChars + + + grapheme_str_split + + + + + MBString + + + + mb_trim + mb_ltrim + mb_rtrim + + mb_ucfirst + mb_lcfirst + + + + + Opcache + + opcache_jit_blacklist + + + + + PCNTL + + + pcntl_getcpu + pcntl_getcpuaffinity + pcntl_getqos_class + pcntl_setns + pcntl_waitid + + + + + PDO_PGSQL + + + Pdo\Pgsql::setNoticeCallback + + + + + + PGSQL + + + pg_change_password + pg_jit + pg_put_copy_data + pg_put_copy_end + pg_result_memory_size + pg_set_chunked_rows_size + pg_socket_poll + + + + + Reflection + + + + + 次のメソッドは新しいレイジーオブジェクト機能に関連しています: + + + ReflectionClass::newLazyGhost + + + ReflectionClass::newLazyProxy + + + ReflectionClass::resetAsLazyGhost + + + ReflectionClass::resetAsLazyProxy + + + ReflectionClass::isUninitializedLazyObject + + + ReflectionClass::initializeLazyObject + + + ReflectionClass::markLazyObjectAsInitialized + + + ReflectionClass::getLazyInitializer + + + ReflectionProperty::skipLazyInitialization + + + ReflectionProperty::setRawValueWithoutLazyInitialization + + + + + + + ReflectionClassConstant::isDeprecated + + + ReflectionGenerator::isClosed + + + ReflectionProperty::isDynamic + + + + + + Sodium + + + sodium_crypto_aead_aegis128l_* + sodium_crypto_aead_aegis256l_* + + + + + SPL + + + + SplObjectStorage::seek + + + + + + SOAP + + + + SoapServer::__getLastResponse + + + + + + Standard + + + http_get_last_response_headers + http_clear_last_response_headers + + fpow + + array_all + array_any + array_find + array_find_key + + + + + + Tidy + + + + tidyNode::getNextSibling + + + tidyNode::getPreviousSibling + + + + + + XMLReader + + + + + XMLReader::fromStream + + + XMLReader::fromUri + + + XMLReader::fromString + + + + + + XMLWriter + + + + + XMLWriter::toStream + + + XMLWriter::toUri + + + XMLWriter::toMemory + + + + + + XSL + + + + + XSLTProcessor::registerPhpFunctionNS + + + + + + diff --git a/appendices/migration84/other-changes.xml b/appendices/migration84/other-changes.xml new file mode 100644 index 0000000000..66c2814a6f --- /dev/null +++ b/appendices/migration84/other-changes.xml @@ -0,0 +1,789 @@ + + + + + + その他の変更 + + + PHP コア + + + クロージャ + + + クロージャの名前が調整され、親関数の名前と + 定義の行番号を含むようになりました。これにより、 + スタックトレース内などでの識別が容易になります。 + + + + + ファイバー(Fibers) + + + デストラクタ実行中にファイバーを切り替えられるようになりました。 + 以前はガベージコレクションとの競合のためブロックされていました。 + + + + デストラクタは別のファイバー内で実行される場合があります。 + + + + ガベージコレクションがファイバー内でトリガーされると、 + GC によって呼び出されるデストラクタは + 別のファイバー(gc_destructor_fiber)内で実行されます。 + このファイバーが中断された場合、残りのデストラクタを実行するために + 新しいファイバーが作成されます。 + 以前の gc_destructor_fiber は GC によって参照されなくなり、 + 他に参照されていなければ回収される可能性があります。 + デストラクタが中断されたオブジェクトは、 + デストラクタが戻るか Fiber が回収されるまで回収されません。 + + + + + 出力ハンドラ + + + ob_startflags パラメータに渡された + 出力ハンドラのステータスフラグがクリアされるようになりました。 + + + + output_add_rewrite_var は、 + リライトされるホストを選択するために + url_rewriter.hosts を使用するようになりました。 + 以前は + session.trans_sid_hosts + を使用していました。 + + + + + + SAPI モジュールへの変更 + + + apache2handler + + + EOLを迎えた Apache 2.0 および 2.2 のサポートが削除されました。 + 最小必要 Apache バージョンは 2.4 になりました。 + + + + + CLI + + + 組み込みサーバーは、指定されたファイルが見つからない場合、 + 親ディレクトリをたどってインデックスファイルを再帰的に探します。 + このプロセスは、パスがファイルを指しているように見える場合 + (最後のパスコンポーネントにピリオドが含まれる場合)はスキップされていました。 + その場合、404 エラーが返されていました。 + この動作は、すべての場合にインデックスファイルを探すように変更されました。 + + + + + FPM + + + 本文なしでヘッダをフラッシュできるようになりました。 + + + + + ステータスページにメモリの最大使用量を表示するフィールドが追加されました。 + + + + + Solaris/Illumos 用の /dev/poll events.mechanism + 設定は廃止されました。 + + + + + + 変更された関数 + + + PHP コア + + + trigger_error および user_error + は、戻り値の型が bool ではなく true になりました。 + + + + + DOM + + + DOMDocument::registerNodeClass + は、戻り値の型が bool ではなく true になりました。 + 実際には常に &true; を返すことしかできませんでした。 + + + + + Hash + + + hash_update + は、戻り値の型が bool ではなく true になりました。 + 実際には常に &true; を返すことしかできませんでした。 + + + + + Intl + + + NumberFormatter::ROUND_TOWARD_ZERO および + NumberFormatter::ROUND_AWAY_FROM_ZERO + が、新しい PHP_ROUND_* + モードと一致するように、 + NumberFormatter::ROUND_DOWN および + NumberFormatter::ROUND_UP + のエイリアスとして追加されました。 + + + + ResourceBundle::get + + は、戻り値の型が ResourceBundle|array|string|int|null になりました。 + + + + idn_to_ascii および idn_to_utf8 + 関数は、domain 名が空または長すぎる場合、 + ValueError をスローするようになりました。 + + + + idn_to_ascii および idn_to_utf8 + 関数は、variant パラメータが + INTL_IDNA_VARIANT_UTS46 でない場合、 + ValueError をスローするようになりました。 + + + + + LibXML + + + libxml_set_streams_context は、 + 非ストリームコンテキストリソースが関数に渡された場合、 + ストリームコンテキストが使用されるときではなく、 + 直ちに TypeError をスローするようになりました。 + + + + + MBString + + + mb_strcut の動作は、 + 無効な UTF-8 および UTF-16 文字列に対してより一貫性のあるものになりました。 + 有効な UTF-8 および UTF-16 文字列に対する動作の変更はありません。 + + + + + ODBC + + + odbc_fetch_object、 + odbc_fetch_array、および + odbc_fetch_into の + row は、デフォルト値が &null; になり、 + odbc_fetch_row と一致するようになりました。 + 以前は、それぞれデフォルト値が + -1、 + -1、 + 0 + でした。 + + + + + OpenSSL + + + openssl_csr_new の + extra_attributes は、 + CSR 属性を設定します。 + 以前はサブジェクト DN が誤って設定されていました。 + + + + openssl_csr_new の + dn は、 + 単一のエントリに対して値の array を設定できるようになりました。 + + + + openssl_csr_sign に新たに + serial_hex が追加され、 + 16 進形式でシリアル番号を設定できるようになりました。 + + + + openssl_x509_parse で ASN.1 UTCTime を解析する際、 + OpenSSL バージョン 3.2 未満では秒が省略されていると失敗します + (そのようなフィールドでは -1 が返されます)。 + OpenSSL バージョン 3.3 以降では、そのような証明書は読み込むことができません。 + + + + + PDO + + + PDO::getAttribute で + PDO::ATTR_STRINGIFY_FETCHES + 属性の値を取得できるようになりました。 + + + + PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE が追加されました。 + サポートされているドライバで PDO::getAttribute を使用して + クエリ結果のメモリ使用量を取得できるようになりました。 + + + + + PDO_FIREBIRD + + + + PDO::getAttribute で + + FB_ATTR_DATE_FORMAT、 + FB_ATTR_TIME_FORMAT、 + FB_ATTR_TIMESTAMP_FORMAT 属性の値を取得できるようになりました。 + + + + トランザクションの分離レベルとアクセスモードを指定するための新しい属性が追加されました。 + この機能のため 5 つの定数が追加されました: + + + Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL + Pdo\Firebird::READ_COMMITTED + Pdo\Firebird::REPEATABLE_READ + Pdo\Firebird::SERIALIZABLE + Pdo\Firebird::WRITABLE_TRANSACTION + + + + + 永続的な接続を使用する場合、コンストラクタ内での生存チェックが追加されました。 + + + + ビルドされる内容は、 + ibase.h 内の + FB_API_VER の値によって変わります。 + この情報を取得するために新しい静的メソッド Pdo\Firebird::getApiVersion + が追加されました。 + この情報は phpinfo からも参照できます。 + + + + 5 つの新しいデータ型が利用可能になりました: + + INT128 + DEC16 + DEC34 + TIMESTAMP_TZ + TIME_TZ + + + これらは Firebird 4.0 以降で利用可能です。 + + + + + PDO_MYSQL + + + + PDO::getAttribute で + PDO::ATTR_FETCH_TABLE_NAMES 属性の + 値を取得できるようになりました。 + + + + + PDO_PGSQL + + + PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE + によるクエリのメモリ使用量の取得をサポートしました。 + + + + カラムが FLOAT4OID または + FLOAT8OID 型の場合、値は + string ではなく float として返されるようになりました。 + + + + + PGSQL + + + pg_selectconditions パラメータ + はオプションになり、空の配列を受け入れるようになりました。 + + + + + Phar + + + + Phar::setAlias + Phar::setDefaultStub + + は、戻り値の型が bool ではなく + true になりました。 + + + + + POSIX + + + posix_isatty は、 + ファイル記述子/ストリーム引数が無効な場合エラー番号を設定するようになりました。 + + + + + Reflection + + + ReflectionGenerator::getFunction + は、ジェネレータの実行が終了した後でも呼び出すことができるようになりました。 + + + + + Sockets + + + socket_create_listen の + backlog パラメータのデフォルト値は + SOMAXCONN になりました。 + 以前は 128 でした。 + + + + + Sodium + + + sodium_crypto_aead_aes256gcm_* + 関数は、ARM 暗号化拡張を持つ aarch64 CPU で + 利用可能になりました。 + + + + + SPL + + + + SplPriorityQueue::insert + SplPriorityQueue::recoverFromCorruption + SplHeap::insert + SplHeap::recoverFromCorruption + + メソッドは、戻り値の型が bool ではなく + true になりました。 + + + + SplObjectStorage は + SeekableIterator を実装するようになりました。 + + + + + Standard + + + + PASSWORD_BCRYPT ハッシュアルゴリズムの + password_hash のデフォルトの 'cost' 値が + 10 から 12 に引き上げられました。 + + + + + debug_zval_dump は、配列がパックされているかどうかを示すようになりました。 + + + + + long2ip は、戻り値の型が string|false ではなく + string になりました。 + + + + highlight_string は、戻り値の型が + + string|bool ではなくstring|true になりました。 + + + + print_r は、戻り値の型が + + string|bool ではなく string|true になりました。 + + + + + <function>round</function> による丸め処理 + + + round 関数の + mode パラメータは、 + + RoundingMode|int に拡張され、 + + 新たに追加された RoundingMode 列挙型のインスタンスを受け入れます。 + + + + + round 関数に 4 つの新しいモードが追加されました: + + RoundingMode::PositiveInfinity + RoundingMode::NegativeInfinity + RoundingMode::TowardsZero + RoundingMode::AwayFromZero + + + + + + 整数への丸めのための内部実装が、正確さの検証と + メンテナンスの容易さのために書き直されました。 + その結果、いくつかの丸め処理のバグが修正されました。 + 例えば、以前は 0.49999999999999994を最も近い整数に丸めると、 + 正しい結果の 0.0 ではなく + 1.0 になっていました。 + 他の入力も影響を受け、以前の PHP バージョンと比較して + 異なる出力になる場合があります。 + + + + round 関数の「事前丸め」によるバグが修正されました。 + 以前は、「事前丸め」により 0.285 + (実際には 0.28499999999999998)のような値を + 10 進数として、0.29 に丸めていました。 + しかし、「事前丸め」は特定の数値を誤って丸めるため、 + この修正では「事前丸め」を削除し、値同士の比較方法を変更することで、 + 値が 10 進数として正しく丸められるようにしました。 + + + + round が処理できる最大精度が + 1桁増えました。 + 例えば、round(4503599627370495.5) は以前は + 4503599627370495.5 を返していましたが、 + 現在は 4503599627370496 を返します。 + + + + + + + + + 拡張モジュールへのその他の変更 + + + cURL + + + 最小必要 libcurl バージョンは 7.61.0 になりました。 + + + + CURLOPT_DNS_USE_GLOBAL_CACHE オプションは + もはや効果がなく、通知なく無視されます。 + この基本機能は libcurl 7.11.1 で非推奨となり、 + libcurl 7.62.0 で削除されました。 + + + + + GMP + + + + GMP オブジェクトを bool に + キャストできるようになりました。以前は E_RECOVERABLE_ERROR が発生していました。 + キャストの動作はオーバーロードされ、値が 0 を表す + GMP オブジェクトは &false; にキャストされます。 + + + + + LibXML + + + 最小必要 libxml2 バージョンは 2.9.4 になりました。 + + + + + Intl + + + Intl クラスの動作が統一され、 + 初期化されていないオブジェクトを使用しようとした場合やクローンに失敗した場合に、 + Error 例外をスローするようになりました。 + + + + + MBString + + + Unicode データテーブルが Unicode 16.0 に更新されました。 + + + + + MySQLnd + + + MySQL 9 の新しい VECTOR データ型のサポート。 + + + + + OpenSSL + + + 最小必要 OpenSSL バージョンは 1.1.1 になりました。 + + + + + PDO_PGSQL + + + 最小必要 libpq バージョンは 10.0 になりました。 + + + + + PGSQL + + + 最小必要 libpq バージョンは 10.0 になりました。 + + + + + SPL + + + SplFixedArray での範囲外アクセスは、 + RuntimeException ではなく + OutOfBoundsException 型の例外をスローするようになりました。 + OutOfBoundsException は + RuntimeException の子クラスであるため、 + これらの例外をキャッチしようとする際の動作に変更はありません。 + + + + + XSL + + + 型付きプロパティ XSLTProcessor::$cloneDocument + および XSLTProcessor::$doXInclude が定義されました。 + + + + + Zlib + + + 最小必要 zlib バージョンは 1.2.11 になりました。 + + + + + + パフォーマンス + + + PHP コア + + + ZTS ビルドにおける高負荷の並行処理環境下で、 + 浮動小数点数の解析とフォーマットのパフォーマンスが向上しました。 + これは printf 系の関数や + json_encodeserialize + などのシリアライズ関数に影響します。 + + + + %s%d 指定子のみを使用する + sprintf は、同等の文字列補間にコンパイルされ、 + 関数呼び出しのオーバーヘッドとフォーマット文字列の + 繰り返し解析を回避します。 + + + + + BCMath + + + 数値の変換と演算のパフォーマンスが向上しました。 + + + + + DOM + + + DOMNode::C14N のパフォーマンスが、 + xpath クエリなしの場合に大幅に向上しました。 + これは数万ノードのドキュメントで簡単に 2 桁の + 時間改善をもたらします。 + + + + XML シリアライズのパフォーマンスが向上し、メモリ消費が削減されました。 + + + + ノードクラスのメモリ使用量が削減されました。 + + + + + FTP + + + 大きなアップロードで FTP アップロードのパフォーマンスが + 最大 10 倍向上しました。 + + + + + Hash + + + SHA-256 の SSE2 および SHA-NI 実装が追加されました。 + これにより、サポートされている CPU でのパフォーマンスが SSE2 で最大 1.3 倍、 + SHA-NIで 3から 5 倍向上します。 + この最適化は Colin Percival / Tarsnap の功績です。 + + + + + MBString + + + mb_strcut は UTF-8 および + UTF-16 文字列で大幅に高速になりました。 + + + + mbstring のエンコーディング名の検索が大幅に高速になりました。 + + + + SJIS-win から Unicode への変換のパフォーマンスが大幅に向上しました。 + + + + + MySQLnd + + + MySQLnd のクオートのパフォーマンスが向上しました。 + + + + + PCRE + + + 名前付きキャプチャグループのパフォーマンスが向上しました。 + + + + + Random + + + Random\Randomizer のパフォーマンスが向上しました。 + 特に Random\Randomizer::getBytes と + Random\Randomizer::getBytesFromString メソッドで顕著です。 + + + + + SimpleXML + + + XML シリアライズのパフォーマンスが向上し、メモリ消費が削減されました。 + + + + + Standard + + + strspn および strcspn の + パフォーマンスが大幅に向上しました。 + 二乗時間ではなく、線形時間で実行されるようになりました。 + + + + strpbrk のパフォーマンスが向上しました。 + + + + get_browser は大幅に高速になり、 + いくつかのテストケースで最大 1.5 倍から 2.5 倍の速度向上を実現しました。 + + + + + + diff --git a/appendices/migration84/removed-extensions.xml b/appendices/migration84/removed-extensions.xml new file mode 100644 index 0000000000..8223de5dc5 --- /dev/null +++ b/appendices/migration84/removed-extensions.xml @@ -0,0 +1,40 @@ + + + + + + 削除された拡張モジュール + + + これらの拡張モジュールは PECL に移行され、 + PHP 配布の一部ではなくなりました。PECL パッケージの新しいリリースは、 + ユーザーの需要に応じて随時公開されます。 + + + + IMAP + OCI8 + PDO_OCI + PSpell + + + diff --git a/appendices/migration84/windows-support.xml b/appendices/migration84/windows-support.xml new file mode 100644 index 0000000000..b66c080f82 --- /dev/null +++ b/appendices/migration84/windows-support.xml @@ -0,0 +1,47 @@ + + + + + + Windows のサポート + + + PHP コア + + + Visual Studio でのビルドには、 Visual Studio 2019 以降が必要になりました。 + ただし、Visual Studio 2022 が推奨されます。 + + + + MSVC ビルドでは、AVX(2) CPU のサポートが正しく検出されるようになりました。 + + + + ネイティブ AVX-512 ビルドが、configure オプション + + でサポートされました。 + + + + +