/
incompatible.xml
166 lines (145 loc) · 7.38 KB
/
incompatible.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 763b31ef61c2aceb779c333c4577d669bf63ea48 Maintainer: mumumu Status: ready -->
<sect1 xml:id="migration82.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>下位互換性のない変更点</title>
<sect2 xml:id="migration82.incompatible.date">
<title>Date</title>
<para>
<methodname>DateTime::createFromImmutable</methodname> の仮の戻り値の型が、
<type>static</type> になりました。
これより前のバージョンでは、<type>DateTime</type> でした。
</para>
<para>
<methodname>DateTimeImmutable::createFromMutable</methodname> の仮の戻り値の型が、
<type>static</type> になりました。
これより前のバージョンでは、<type>DateTimeImmutable</type> でした。
</para>
<para>
<link linkend="datetime.formats.relative">相対的な書式</link> の <literal>number</literal>
シンボルは、複数の符号を受け入れなくなりました。
たとえば、<literal>+-2</literal> のようなフォーマットです。
</para>
</sect2>
<sect2 xml:id="migration82.incompatible.odbc">
<title>ODBC</title>
<para>
ODBC 拡張モジュールは、ユーザー名/パスワードと接続文字列が両方渡された場合に、
ユーザー名とパスワードをエスケープするようになりました。そして、
エスケープ済みのものを接続文字列と結合することが必須になりました。
これより前のバージョンでは、
エスケープする必要がある値が含まれたユーザー指定の文字列によって、悪意ある接続文字列を生成される可能性がありました。
また、ユーザー指定の文字列を値に注入されてしまう可能性もありました。
このエスケープのルールは .NET BCL の DbConnectionOptions の振る舞いと同じです。
<!-- https://github.com/php/php-src/commit/2920a266364aef84df82cbb2b01b573705fa57ec -->
</para>
</sect2>
<sect2 xml:id="migration82.incompatible.pdo-odbc">
<title>PDO_ODBC</title>
<para>
PDO_ODBC 拡張モジュールは、接続文字列を渡した場合にユーザー名とパスワードをエスケープするようになりました。
詳細は <link linkend="migration82.incompatible.odbc">ODBC の変更点</link> を参照ください。
</para>
</sect2>
<sect2 xml:id="migration82.incompatible.standard">
<title>標準ライブラリ</title>
<para>
<function>glob</function> は、
すべてのパスが <link linkend="ini.open-basedir">open_basedir</link> によって制限されている場合に、
空の配列を返すようになりました。
これより前のバージョンでは、&false; を返していました。
さらに、パスの一部が <link linkend="ini.open-basedir">open_basedir</link> によって制限されている場合でも、
警告が発生するようになっています。
</para>
<para>
<methodname>FilesystemIterator::__construct</methodname> を使うと、
以前のバージョンでは
<constant>FilesystemIterator::SKIP_DOTS</constant> が常に設定され、削除できませんでしたが、この振る舞いはなくなりました。
以前の振る舞いを維持するには、
<parameter>flags</parameter> パラメータを使ってその定数を明示的に常に設定しなければいけません。
<parameter>flags</parameter> パラメータのデフォルト値は変更されていません。
</para>
<para>
<function>strtolower</function>,
<function>strtoupper</function>,
<function>stristr</function>,
<function>stripos</function>,
<function>strripos</function>,
<function>lcfirst</function>,
<function>ucfirst</function>,
<function>ucwords</function>,
<function>str_ireplace</function> は、ロケールに依存しなくなりました。
これらは、ロケールが "C" であったかのように ASCII のケース変換を行います。
これらの関数のロケール対応版は、<link linkend="book.mbstring">マルチバイト文字列</link> 関数で使えます。
さらに、<function>array_change_key_case</function> 関数を使った場合や、
<constant>SORT_FLAG_CASE</constant> を使ってソートを行った場合も、ASCII のケース変換を行います。
</para>
<para>
<function>str_split</function> は、空文字列を渡した場合に、空の配列を返すようになりました。
これより前のバージョンでは、空文字列の要素が一つ入った配列を返していました。
<function>mb_str_split</function> は、既に空の配列を返しているため、影響を受けません。
</para>
<para>
<function>ksort</function> と <function>krsort</function> は、
<constant>SORT_REGULAR</constant> を使って数値文字列の比較を行う際に、
PHP 8 で標準になっているルールを使うようになりました。
</para>
<para>
<function>var_export</function> は、クラス名をエクスポートする際、
先頭のバックスラッシュを省略しなくなりました。
つまり、エクスポートされるクラス名は完全修飾名になりました。
</para>
</sect2>
<sect2 xml:id="migration82.incompatible.spl">
<title>Standard PHP Library (SPL)</title>
<para>
以下のメソッドは、シグネチャを強制するようになりました:
<simplelist>
<member><methodname>SplFileInfo::_bad_state_ex</methodname></member>
<member><methodname>SplFileObject::getCsvControl</methodname></member>
<member><methodname>SplFileObject::fflush</methodname></member>
<member><methodname>SplFileObject::ftell</methodname></member>
<member><methodname>SplFileObject::fgetc</methodname></member>
<member><methodname>SplFileObject::fpassthru</methodname></member>
</simplelist>
</para>
<para>
<methodname>SplFileObject::hasChildren</methodname> の仮の戻り値の型が、
<type>false</type> になりました。
これより前のバージョンでは、<type>bool</type> でした。
</para>
<para>
<methodname>SplFileObject::getChildren</methodname> の仮の戻り値の型が、
<type>null</type> になりました。
これより前のバージョンでは、<type class="union"><type>RecursiveIterator</type><type>null</type></type> でした。
</para>
<para>
<classname>GlobIterator</classname> は、
すべてのパスが <link linkend="ini.open-basedir">open_basedir</link> によって制限されている場合に、
空の配列を返すようになりました。
これより前のバージョンでは、&false; を返していました。
さらに、パスの一部が <link linkend="ini.open-basedir">open_basedir</link> によって制限されている場合でも、
警告が発生するようになっています。
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->