diff --git a/appendices/configure/misc.xml b/appendices/configure/misc.xml index 9561c7d5e09..a533ab69ace 100644 --- a/appendices/configure/misc.xml +++ b/appendices/configure/misc.xml @@ -1,6 +1,6 @@ - + 一般的なオプション @@ -49,6 +49,28 @@ + + + + + + + max_execution_time + の計測に、プロセス全体に作用する setitimer() + ではなく、POSIX のスレッドごとのタイマーを使用します。 + これらのタイマーが計測するのは経過時間 + (CLOCK_BOOTTIME、FreeBSD では + CLOCK_MONOTONIC) であり、デフォルトの + setitimer(ITIMER_PROF) が計測する CPU 時間とは + 異なります。そのため、スリープや I/O 待ちに費やした時間も + 制限時間に加算されます。 + timer_create() のサポートが必要です。 + Linux で使用でき、FreeBSD では PHP 8.4.0 以降で使用できます。 + PHP 8.1.0 以降で利用可能です。 + PHP 8.3.0 以降、ZTS ビルドではデフォルトで有効になっています。 + + + diff --git a/appendices/migration72/incompatible.xml b/appendices/migration72/incompatible.xml index 974b5ad4a47..2703e601410 100644 --- a/appendices/migration72/incompatible.xml +++ b/appendices/migration72/incompatible.xml @@ -1,6 +1,6 @@ - + @@ -265,13 +265,16 @@ int(2) <function>array_unique</function> 関数を <constant>SORT_STRING</constant> と使う場合 - + array_unique 関数を SORT_STRING - と使う場合、以前は配列をコピーし、重複した要素を削除 - (配列を後にパックせずに) していましたが、このバージョンからは - 新しい配列作られ、ユニークな要素を追加するようになりました。 - これにより、以前のバージョンとは異なった数値のインデックスが生成されます。 - + と使う場合、返される配列は、ユニークな要素を新しい配列に追加して構築されます。 + 以前は、入力の配列をコピーして重複した要素を削除したものでした。 + どちらも同じ要素を同じキーで保持します。 + ただし、入力の配列の中で整数のキーが最大だった要素が重複として取り除かれた場合、 + 返される配列に要素を追加したときに生成されるインデックスは、 + 入力の配列 (訳注: およびこれより前のバージョンの戻り値) に追加したときとは + 異なります。 + diff --git a/appendices/migration82/other-changes.xml b/appendices/migration82/other-changes.xml index 03829c740fe..95b4a2dc8be 100644 --- a/appendices/migration82/other-changes.xml +++ b/appendices/migration82/other-changes.xml @@ -1,6 +1,6 @@ - + その他の変更 @@ -128,6 +128,11 @@ DatePeriod のプロパティが、適切に宣言されるようになりました。 + + + date.timezone INI 設定が指定されていない場合、 + デフォルトのタイムゾーンは UTC にフォールバックします。 + diff --git a/appendices/migration84/incompatible.xml b/appendices/migration84/incompatible.xml index 7e50e6d2cc4..21f01fcdd24 100644 --- a/appendices/migration84/incompatible.xml +++ b/appendices/migration84/incompatible.xml @@ -1,6 +1,6 @@ - + 下位互換性のない変更点 @@ -407,7 +407,7 @@ unserialize"allowed_classes" オプションは、 - クラス名の array でない場合、 + クラス名の array でも bool でもない場合、 TypeError および ValueError をスローするようになりました。 @@ -514,19 +514,19 @@ MBString - 無効な文字列(エンコーディングエラーを含む)に対して、 - mb_substr は他の多くの mbstring 関数と同様に、 - 文字インデックスを解釈するようになりました。 + PHP 8.3.2 以降、無効な文字列(エンコーディングエラーを含む)に対して、 + mb_substrmb_strstr は + 他の多くの mbstring 関数と同様に、文字インデックスを解釈するようになりました。 これにより、mb_strpos が返す文字インデックスを mb_substr に渡すことができます。 - SJIS-Mac(MacJapanese) 文字列の場合、mb_substr - に渡される文字インデックスは、文字列が Unicode に変換されたときに生成される + SJIS-mac (MacJapanese) 文字列の場合、 + これらの文字インデックスは、文字列が Unicode に変換されたときに生成される Unicode コードポイントのインデックスを参照します。 - これは、 SJIS-Mac の約40文字が複数の Unicode コードポイントの - シーケンスに変換されることによる重要な処理です。 + これらは、複数のコードポイントのシーケンスに変換される + SJIS-mac 文字の文字インデックスとは異なります。 diff --git a/appendices/migration84/other-changes.xml b/appendices/migration84/other-changes.xml index 32f87030e6b..4e6e861b4cc 100644 --- a/appendices/migration84/other-changes.xml +++ b/appendices/migration84/other-changes.xml @@ -1,6 +1,6 @@ - + その他の変更 @@ -550,9 +550,13 @@ Intl - Intl クラスの動作が統一され、 - 初期化されていないオブジェクトを使用しようとした場合やクローンに失敗した場合に、 - Error 例外をスローするようになりました。 + Intl オブジェクトをクローンできない場合、 + すなわちオブジェクトが初期化されていないか、 + 内部の ICU のクローン操作が失敗したときには、 + 一貫して Error がスローされるようになりました。 + 以前は、これらのクラスのほとんどは代わりに + Exception をスローし、 + Spoofchecker は致命的なエラーを発生させていました。 diff --git a/appendices/reserved.constants.core.xml b/appendices/reserved.constants.core.xml index f71c3ade06a..75e314bbeee 100644 --- a/appendices/reserved.constants.core.xml +++ b/appendices/reserved.constants.core.xml @@ -1,6 +1,6 @@ - + コアの定義済みの定数 @@ -591,13 +591,21 @@ E_ALL (int) + + + エラーを報告する定数。 + + + + E_STRICT (int) - エラーを報告する定数 + エラーを報告する定数。 + この定数は使われておらず、PHP 8.4.0 で非推奨となりました。 diff --git a/appendices/reserved.xml b/appendices/reserved.xml index f0d01cda32a..88218599d44 100644 --- a/appendices/reserved.xml +++ b/appendices/reserved.xml @@ -1,6 +1,6 @@ - + @@ -21,7 +21,7 @@ これらは言語を構成するものです。 以下のキーワードはいずれも定数、クラス名、 関数名として使用することはできません。 - しかし、クラスやインターフェイス、そしてトレイトの内部では、 + しかし、クラスやインターフェイス、トレイト、そして列挙型の内部では、 プロパティ、定数、メソッドの名前として使うことができます。 但し、class だけは例外で、これを定数名として使うことはできません。 @@ -321,12 +321,6 @@ - - - - - - @@ -510,7 +504,7 @@ その他の予約語の一覧 - これらの名前は、クラスやインターフェイスそしてトレイトの名前として使えません。 + これらの名前は、クラスやインターフェイス、トレイト、そして列挙型の名前として使えません。 PHP 8.0 より前のバージョンでは、名前空間の中であっても使えませんでした。 @@ -578,11 +572,11 @@ - + これらの名前は、弱い予約語として確保されています。 - クラスやインターフェイスそしてトレイトの名前として使えますが、 + クラスやインターフェイス、トレイト、そして列挙型の名前として使えますが、 使わないことを強く推奨します。将来のバージョンの PHP で使われる可能性があるためです。 - + 弱い予約語 diff --git a/appendices/tokens.xml b/appendices/tokens.xml index cbb250cb169..7b90d82de0d 100644 --- a/appendices/tokens.xml +++ b/appendices/tokens.xml @@ -1,6 +1,6 @@ - + パーサートークンの一覧 @@ -1068,7 +1068,7 @@ defined('T_FN') || define('T_FN', 10001); __PROPERTY__ - マジック定数 + マジック定数 (PHP 8.4.0 以降で利用可能) diff --git a/appendices/userlandnaming.xml b/appendices/userlandnaming.xml index 289702add14..e6c0ce6d8af 100644 --- a/appendices/userlandnaming.xml +++ b/appendices/userlandnaming.xml @@ -1,14 +1,14 @@ - + ユーザーレベルでの命名の手引き - + これは、あなたが書く PHP コード中の識別子によりよい名前をつけるための手引きです。 グローバル名前空間のシンボルを作成するコードでシンボルの名前を決める際には、 以下のガイドラインを考慮することが重要です。これにより、 PHP の将来のバージョンとの衝突を避けることができます。 - +
グローバル名前空間 @@ -17,25 +17,27 @@ - 関数 - クラス - インターフェイス - 定数 (クラス定数以外) + 関数 + クラス + インターフェイス + トレイト + 列挙型 + 定数 (クラス定数以外) - 関数/メソッド の外部で定義された変数 + 関数やメソッドの外部で定義された変数
ルール - + 以下のリストは、PHP プロジェクトで新たな内部識別子を作成する際に どのような基準で名前を決めているのかを おおまかにまとめたものです。完全な規約は、公式の - コーディング規約 + PHP コーディング規約 を参照ください。 - + @@ -46,23 +48,24 @@ - - 関数名では、単語の間にアンダースコアを使用します。クラスの場合は、 - キャメルケース (camelCase) 形式や - パスカルケース (PascalCase) 形式を使います。 - + + 関数名では、単語の間にアンダースコアを使用します。クラス名では + パスカルケース (PascalCase) 形式を、 + メソッド名ではキャメルケース (camelCase) 形式を使います。 + - + PHP の拡張モジュールのグローバルシンボルには、 その拡張モジュールの名前を先頭につけます - (過去には、この原則を守っていない例が大量にありました)。 + (過去には、この原則を守っていない例が大量にあったため、 + 拡張モジュール名がついていない既存の名前も存在します)。 たとえば次のようになります。 - + - curl_close - mysql_query + curl_exec + mysqli_query PREG_SPLIT_DELIM_CAPTURE new DOMDocument() @@ -85,14 +88,18 @@ - + PHP では、__ で始まるシンボルを特殊なものとして予約済みです。 以下にあげるような文書化されている機能を使用する場合を除き、 __ で始まるシンボルを作成しないことを推奨します。 - + - __get() - __autoload + + __get() + + + __construct() + @@ -100,12 +107,12 @@
Tips - + 将来もそのまま使用できるようなコードを書くためには、 グローバル名前空間にあまり多くの変数や関数やクラスを置かないことをおすすめします。 そうしておけば、サードパーティのコードと名前が衝突したり PHP 自体に追加された機能と名前が衝突したりする可能性を減らせます。 - + 関数やクラスの名前が衝突することを防ぐ手としてよくあるのが、 それ専用の @@ -119,23 +126,26 @@ namespace MyProject; -function my_function() { +function my_function() +{ return true; } \MyProject\my_function(); + +?> ]]> - + 既存の名前空間と名前が重複してしまわないように気をつける必要はありますが、 いったん名前空間を用意してしまえば、そこに関数やクラスを追加するときには 名前が衝突する心配をせずに済むようになります。 - - + + サードパーティのコードとの名前の衝突を防ぐという意味で、 グローバル名前空間への変数の追加をできるだけ避けるというのはよい習慣だと考えられています。 - + 変数のスコープ diff --git a/language/control-structures/foreach.xml b/language/control-structures/foreach.xml index 4594b9fc3a6..7e6c2e6ceec 100644 --- a/language/control-structures/foreach.xml +++ b/language/control-structures/foreach.xml @@ -1,13 +1,12 @@ - + foreach foreach は、 - 配列と Traversable - オブジェクトを反復処理する簡単な方法を提供します。 + 配列とオブジェクトを反復処理する簡単な方法を提供します。 それらと異なるデータ型や、未初期化の変数と一緒に foreach を使うと、エラーが発生します。 @@ -28,7 +27,7 @@ foreach (iterable_expression as $key => $value) { - 最初の形式は、iterable_expression で指定した反復可能な値に + 最初の形式は、iterable_expression で指定した値に 関してループ処理を行います。各反復において現在の要素の値が $valueに代入されます。 @@ -43,6 +42,9 @@ foreach (iterable_expression as $key => $value) { のような関数で使われる、内部的な配列のポインタを変更しない点に注意して下さい。 + デフォルトでは、オブジェクトは、現在のスコープから + アクセス可能な + プロパティについて反復処理されます。 オブジェクトの反復処理をカスタマイズ することもできます。 diff --git a/language/exceptions.xml b/language/exceptions.xml index 78d9703735b..ba5d9a05443 100644 --- a/language/exceptions.xml +++ b/language/exceptions.xml @@ -1,6 +1,6 @@ - + @@ -431,7 +431,7 @@ string(6) "Fourth" - - 例外を複製することはできません。Exception を + 例外はクローンできません。例外を clone しようとすると - 致命的な E_ERROR エラーが発生します。 - + Error がスローされます。 + これは、サブクラスが独自の __clone() + メソッドを宣言していても同様です。 + 例外クラスを拡張する diff --git a/language/functions.xml b/language/functions.xml index 58a3caec446..9f45ad0aafb 100644 --- a/language/functions.xml +++ b/language/functions.xml @@ -1,6 +1,6 @@ - + 関数 @@ -1187,15 +1187,18 @@ $greet('PHP'); - &example.outputs.similar; + &example.outputs; + string(5) "hello" + [1]=> + string(5) "world" +} ]]> diff --git a/language/generators.xml b/language/generators.xml index 3738926252f..dcf327073f0 100644 --- a/language/generators.xml +++ b/language/generators.xml @@ -1,6 +1,6 @@ - + @@ -31,13 +31,13 @@ イテレーターと同じく、ランダムアクセスはできません。 - + シンプルな例として、range 関数をジェネレータで実装しなおしてみましょう。 標準の range 関数は、すべての値を含む配列を作ってそれを返します。 結果的に、かなり大きな配列になる可能性があります。たとえば range(0, 1000000) を実行すると、 - 100 MB を超えるメモリを使うことになります。 - + 10 MB を超えるメモリを使うことになります。 + その代替として、ジェネレータ xrange() を実装します。 diff --git a/language/oop5/properties.xml b/language/oop5/properties.xml index 43fca66f6be..69ec91f03d1 100644 --- a/language/oop5/properties.xml +++ b/language/oop5/properties.xml @@ -1,6 +1,6 @@ - + @@ -276,6 +276,37 @@ $test1->prop = "foobar"; + + + 読み取り専用プロパティを初期化できるのは、直接代入する場合だけです。 + 初期化されていない読み取り専用プロパティを、 + 参照によって初期化することはできません。 + これは、そのプロパティが宣言されたスコープからであっても同様です。 + 参照渡しを期待する関数のパラメータに渡したり、 + 参照による代入を行ったりすると、 + Error 例外が発生します。 + + +matches); + // Error: Cannot indirectly modify readonly property Test::$matches + } +} + +new Test('abc 42'); +?> +]]> + + + + 読み取り専用プロパティに対して、 @@ -391,6 +422,15 @@ var_dump($test2->prop); // NULL + + + PHP 8.4.0 以降では、__clone() 内で + 読み取り専用プロパティを間接的に変更すること + (そのプロパティへの参照を取得する $ref = &$this->prop など) は、 + 許可されなくなりました。 + これは、読み取り専用プロパティの初期化時にはすでに禁止されていました。 + + diff --git a/language/operators/comparison.xml b/language/operators/comparison.xml index 0b54836c095..75035a6bd94 100644 --- a/language/operators/comparison.xml +++ b/language/operators/comparison.xml @@ -1,6 +1,6 @@ - + 比較演算子 比較演算子 @@ -335,6 +335,15 @@ function standard_array_compare($op1, $op2) + + + 比較中に再帰が発生すると + (たとえば、自分自身への参照を含む配列やオブジェクトを比較した場合)、 + PHP 8.4.0 以降は Error がスローされます。 + これより前のバージョンでは、致命的なエラーが発生していました。 + + + 比較できない値 diff --git a/language/predefined/exception/clone.xml b/language/predefined/exception/clone.xml index efecba30522..dac1137a533 100644 --- a/language/predefined/exception/clone.xml +++ b/language/predefined/exception/clone.xml @@ -1,6 +1,6 @@ - + Exception::__clone @@ -13,10 +13,18 @@ private voidException::__clone - - Exception のコピーは作成できません。 - 作成しようとすると、Error がスローされます。 - + + 例外はクローンの作成をサポートしていません。 + このメソッドは、それを防ぐためだけに存在します。 + + + + 例外は、Exception のインスタンスであっても + そのサブクラスのインスタンスであっても、クローンできません。 + 例外を clone しようとすると、 + キャッチ可能な Error がスローされます。 + + @@ -53,7 +61,10 @@ 8.1.0 Exception::__clone は、 - final ではなくなりました。 + final と宣言されなくなりました。 + PHP 8.0.0 以降、private + メソッドを final と宣言すると警告が発生するためです。 + 例外がクローンできないことに変わりはありません。 diff --git a/language/predefined/iterator/rewind.xml b/language/predefined/iterator/rewind.xml index 3ca7d5e5ae3..b3550a66eb2 100644 --- a/language/predefined/iterator/rewind.xml +++ b/language/predefined/iterator/rewind.xml @@ -1,6 +1,6 @@ - + Iterator::rewind @@ -24,7 +24,7 @@ には実行 されません - &foreach; は反復処理の開始前に必ず rewind を呼び出すため、 + &foreach; は反復処理の開始前に必ずこのメソッドを呼び出すため、 手動でイテレータの位置を進めていた場合(例えば SplFileObject::seek を使って移動した場合など)でもリセットされます。 diff --git a/language/predefined/traversable.xml b/language/predefined/traversable.xml index f113783a5aa..493752d75e2 100644 --- a/language/predefined/traversable.xml +++ b/language/predefined/traversable.xml @@ -1,6 +1,6 @@ - + <interfacename>Traversable</interfacename> インターフェイス @@ -48,7 +48,7 @@
- 7.4.0 + 8.0.0 Traversable インターフェイスは、抽象クラスによって実装できるようになりました。 これを拡張するには、 @@ -64,22 +64,23 @@
&reftitle.notes; - + このインターフェイスを実装した内部(組み込み)クラスは、 &foreach; の中で使うことができます。 IteratorAggregateIterator を実装する必要はありません。 - + - - PHP 7.4.0 より前のバージョンでは、 + + PHP 8.0.0 より前のバージョンでは、 この内部的なエンジンのインターフェイスは - PHP スクリプトが実装できませんでした。 + PHP スクリプトからは直接実装できませんでした。 + 抽象クラスであっても同様です。 代わりに、 IteratorAggregate - か Iterator を使わなければなりませんでした。 - + か Iterator を使わなければなりません。 +
diff --git a/language/types/string.xml b/language/types/string.xml index 45a78b49e44..2e82417b388 100644 --- a/language/types/string.xml +++ b/language/types/string.xml @@ -1,6 +1,6 @@ - + 文字列 @@ -217,7 +217,8 @@ echo 'Variables do not $expand $either', PHP_EOL; 終端ID は、スペースまたはタブでインデントできます。 - その場合、インデントされた部分は文字列の全ての行から取り除かれます。 + その場合、終端ID のインデントと同じ量の空白文字が、 + ヒアドキュメント文字列の各行の先頭から取り除かれます。 PHP 7.3.0 より前のバージョンでは、 終端ID はその行の最初のカラムから始めなければ いけませんでした。 @@ -241,12 +242,13 @@ echo << &example.outputs.73; @@ -255,9 +257,10 @@ echo << @@ -1098,10 +1101,16 @@ var_dump($str); - + 文字列のオフセットは整数あるいは整数と見なせる文字列に限られます。 - それ以外の場合は警告が発生します。 - + PHP 8.0.0 以降では、それ以外の文字列を指定すると + TypeError がスローされます。 + ただし、整数で始まりその後に他の文字が続く文字列の場合は + E_WARNING が発生し、先頭の整数として解釈されます。 + PHP 8.0.0 より前のバージョンでは TypeError + はスローされず、不正なオフセットを指定した場合は + E_WARNING が発生していました。 + 不正な文字列のオフセットの例 @@ -1126,7 +1135,7 @@ foreach ($keys as $keyToTry) { ?> ]]> - &example.outputs; + &example.outputs.8; + + &example.outputs.7; + + diff --git a/language/variables.xml b/language/variables.xml index 23ee8400592..9d390a8388a 100644 --- a/language/variables.xml +++ b/language/variables.xml @@ -1,6 +1,6 @@ - + @@ -26,10 +26,23 @@ - PHP は Unicode の変数名はサポートしていませんが、 - (UTF-8のような)文字エンコーディングによっては、 - マルチバイト文字の全てのバイトを可能な範囲にまでエンコードする場合があり、 - その結果正しい変数名になる場合があります。 + 変数名は、文字単位ではなくバイト単位で比較されます。 + PHP は、128 から 255 までのバイトのエンコーディングを解釈も検証もしません。 + ふたつの名前が同じ変数を指すのは、バイト列が完全に一致する場合だけです。 + + + その結果のひとつとして、UTF-8 で書いた名前は使えます。 + UTF-8 のマルチバイト列を構成するバイトは、すべて許される範囲に収まるからです。 + 非 ASCII のバイトがすべてこの範囲に収まるエンコーディングにも、 + どのエンコーディングとしても正しいテキストにならないバイト列にも、同じことが当てはまります。 + 一方、Shift-JIS や UTF-16 のように、マルチバイト列の中で 128 未満のバイトを使う + エンコーディングには当てはまりません。 + + + もうひとつの結果として、見た目が同じふたつの名前が別のものであることがあります。 + ä を U+00E4 として符号化したものと、a + に結合文字のダイエレシス U+0308 を続けたものは、別々の変数です。 + 末尾に U+00A0 のノーブレークスペースが付く名前と付かない名前も同様です。 diff --git a/reference/array/functions/array-unique.xml b/reference/array/functions/array-unique.xml index 7c30b1613b3..42863cb1538 100644 --- a/reference/array/functions/array-unique.xml +++ b/reference/array/functions/array-unique.xml @@ -1,6 +1,6 @@ - + @@ -58,6 +58,16 @@ SORT_REGULAR - 通常の比較 (型変換をしない) を行います + + + 数値形式の文字列とそうでない文字列が混在する配列に + SORT_REGULAR を使った場合、 + ソートしてから比較するアルゴリズムでは + 等しい要素が隣り合うとは限らないため、 + 結果に重複が残ることがあります。 + これを避けるには SORT_STRING を使ってください。 + + SORT_NUMERIC - 数値として比較します @@ -101,10 +111,15 @@ 7.2.0 flagsSORT_STRING の場合、 - 新しい配列が生成され、ユニークな要素が追加されるようになりました。 - これによって、異なった数値のインデックスが振られる可能性があります。 - これより前のバージョンでは、 array がコピーされ、 - (配列を後にパックせずに) ユニークでない値が削除されていました。 + 返される配列は、ユニークな要素を新しい配列に追加して + 構築されるようになりました。 + これより前のバージョンでは、array をコピーして + 重複した要素を削除したものでした。 + どちらも同じ要素を同じキーで保持します。 + ただし、array の中で整数のキーが最大だった要素が + 重複として取り除かれた場合、返される配列に要素を追加したときに + 生成されるインデックスは、array + (訳注: およびこれより前のバージョンの戻り値) に追加したときとは異なります。
diff --git a/reference/info/ini.xml b/reference/info/ini.xml index 725fa9c6656..a8a5aa62055 100644 --- a/reference/info/ini.xml +++ b/reference/info/ini.xml @@ -1,6 +1,6 @@ - +
&reftitle.runtime; @@ -256,6 +256,16 @@ 影響を受けません。より詳細な情報については、 set_time_limit 関数の説明を参照ください。 + + --enable-zend-max-execution-timers + を指定して PHP をコンパイルした場合 + (PHP 8.3.0 以降、ZTS ビルドではこれがデフォルトです)、 + この制限時間の計測には POSIX のスレッドごとのタイマーが使われます。 + これらのタイマーが計測するのは経過時間なので、 + スリープや I/O 待ちに費やした時間も制限時間に加算されます。 + 一方、デフォルトの setitimer(ITIMER_PROF) + を使った方式が計測するのは CPU 時間です。 + Web サーバー側でもタイムアウトの設定項目を持ち、 その設定で PHP の実行が中断されることもあります。 diff --git a/reference/intl/book.xml b/reference/intl/book.xml index fd17e4f3c42..8de9e17eba9 100644 --- a/reference/intl/book.xml +++ b/reference/intl/book.xml @@ -1,6 +1,6 @@ - + @@ -90,6 +90,18 @@ + + + PHP 8.4.0 以降、Intl オブジェクトをクローンできない場合、 + すなわちオブジェクトが初期化されていない (コンストラクタを呼び出さずに作成された) か、 + 内部の ICU のクローン操作が失敗したときには、 + 一貫して Error がスローされます。 + 以前は、これらのクラスのほとんどは代わりに + Exception をスローし、 + Spoofchecker は致命的なエラーを発生させていました。 + + +
リンク diff --git a/reference/mbstring/book.xml b/reference/mbstring/book.xml index 918324f3b2b..524d9cae84a 100644 --- a/reference/mbstring/book.xml +++ b/reference/mbstring/book.xml @@ -1,6 +1,6 @@ - + @@ -27,7 +27,7 @@ マルチバイト文字の先頭バイトまたは終了バイトを検出できずに文字列を壊し、 多くの場合には元の意味を失わせてしまう可能性があります。 - + mbstring はマルチバイト対応の文字列関数を提供し、 PHP でマルチバイトエンコーディングを処理することを容易にします。 それに加えて、mbstring は、 @@ -35,7 +35,11 @@ mbstring は UTF-8 や UCS-2 のような Unicode に基づくエンコーディングや多くのシングルバイトエンコーディングを処理するのに便利です (サポートされる文字エンコーディング に一覧があります)。 - + + + mbstring が使用する Unicode データテーブルは、 + PHP 8.4.0 で Unicode 16.0 に、PHP 8.5.0 で Unicode 17.0 に更新されました。 + diff --git a/reference/mbstring/functions/mb-strstr.xml b/reference/mbstring/functions/mb-strstr.xml index 7661c08dba8..1eb1b894023 100644 --- a/reference/mbstring/functions/mb-strstr.xml +++ b/reference/mbstring/functions/mb-strstr.xml @@ -1,6 +1,6 @@ - + mb_strstr @@ -85,6 +85,16 @@
+ + 8.3.2 + + 不正な文字列(エンコーディングエラーを含むもの)および + SJIS-mac (MacJapanese) の文字列に対しては、 + before_needle が &true; のときに返される + haystack の部分が、 + 他の mbstring 関数と同じ文字インデックスに基づいて決まるようになりました。 + + &mbstring.changelog.needle-empty; &mbstring.changelog.encoding-nullable; diff --git a/reference/mbstring/functions/mb-substr.xml b/reference/mbstring/functions/mb-substr.xml index 7bdf867bfc1..6dd20e2b556 100644 --- a/reference/mbstring/functions/mb-substr.xml +++ b/reference/mbstring/functions/mb-substr.xml @@ -1,6 +1,6 @@ - + @@ -94,12 +94,17 @@ - 8.4.0 + 8.3.2 不正な文字列(エンコーディングエラーを含むもの)に対しては、 他のほとんどの mbstring 関数と同じように文字インデックスが解釈されるようになりました。 つまり、mb_strpos が返す文字インデックスを 直接渡せるようになりました。 + SJIS-mac (MacJapanese) 文字列の場合、 + 文字インデックスは、文字列が Unicode に変換されたときに生成される + Unicode コードポイントのインデックスを参照するようになりました。 + これらは、複数のコードポイントのシーケンスに変換される + SJIS-mac 文字の文字インデックスとは異なります。 &mbstring.changelog.encoding-nullable; @@ -110,12 +115,10 @@ &reftitle.seealso; - - - mb_strcut - mb_internal_encoding - - + + mb_strcut + mb_internal_encoding + diff --git a/reference/var/functions/unserialize.xml b/reference/var/functions/unserialize.xml index 74fa87dd206..1e072bad3e1 100644 --- a/reference/var/functions/unserialize.xml +++ b/reference/var/functions/unserialize.xml @@ -1,6 +1,6 @@ - + @@ -154,7 +154,7 @@ PHP 8.4.0 以降では、optionsallowed_classes 要素が - クラス名の array でない場合、 + クラス名の array でも bool でもない場合、 unserializeTypeErrorValueError をスローします。 @@ -176,7 +176,7 @@ 8.4.0 optionsallowed_classes 要素が - クラス名の array でない場合、 + クラス名の array でも bool でもない場合、 TypeErrorValueError を スローするようになりました。