-
Notifications
You must be signed in to change notification settings - Fork 39
/
incompatible.xml
376 lines (326 loc) · 13.1 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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: c308ed37a98decb1959ed47dc149a43d6c71ec60 Maintainer: samesch Status: ready -->
<sect1 xml:id="migration74.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Nicht abwärtskompatible Änderungen</title>
<sect2 xml:id="migration74.incompatible.core">
<title>PHP-Kern</title>
<sect3 xml:id="migration74.incompatible.core.non-array-access">
<title>Zugriff auf Nicht-Arrays im Array-Stil</title>
<para>
Der Versuch, Werte vom Typ <type>null</type>, <type>bool</type>,
<type>int</type>, <type>float</type> oder <type>resource</type> wie ein
Array zu verwenden, (&zb; <literal>$null["key"]</literal>) erzeugt nun
einen Hinweis.
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.get-declared-classes">
<title>Die Funktion <function>get_declared_classes</function></title>
<para>
<function>get_declared_classes</function> gibt keine anonymen Klassen mehr
zurück, die noch nicht instanziiert wurden.
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.fn">
<title>Das Schlüsselwort <literal>fn</literal></title>
<para>
<literal>fn</literal> ist nun ein reserviertes Schlüsselwort. Insbesondere
kann es nicht mehr als Funktions- oder Klassenname verwendet werden.
Es kann weiterhin als Name einer Methode oder Klassenkonstante verwendet
werden.
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.php-tag">
<title><literal><?php</literal>-Tag am Ende der Datei</title>
<para>
Das Tag <literal><?php</literal> am Ende der Datei (ohne nachgestellten
Zeilenumbruch) wird nun als ein öffnendes PHP-Tag interpretiert. Zuvor
wurde es entweder als kurzes öffnendes Tag gefolgt vom Literal
<literal>php</literal> interpretiert und führte zu einem Syntaxfehler (bei
<literal>short_open_tag=1</literal>) oder es wurde als literale
Zeichenkette <literal><?php</literal> interpretiert (bei
<literal>short_open_tag=0</literal>).
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.stream-wrappers">
<title>Stream-Wrapper</title>
<para>
Wenn include/require für einen Stream verwendet wird, wird
<methodname>streamWrapper::stream_set_option</methodname> mit der Option
<constant>STREAM_OPTION_READ_BUFFER</constant> aufgerufen. Bei einem
benutzerdefinierten Stream-Wrapper kann es notwendig sein, die Methode
<methodname>streamWrapper::stream_set_option</methodname> zu
implementieren, um eine Warnung zu vermeiden (eine Implementierung, die
immer &false; zurückgibt, ist normalerweise ausreichend).
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.serialization">
<title>Serialisierung</title>
<para>
Das Serialisierungsformat <literal>o</literal> wurde entfernt. Da es von
PHP nie erzeugt wurde, kann dies nur die Deserialisierung von manuell
erstellten Zeichenketten beeinträchtigen.
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.password-algorithm-constants">
<title>Konstanten für den Passwort-Algorithmus</title>
<para>
Die Bezeichner der Algorithmen für das Hashing von Passwörtern sind nun
keine Ganzzahlen mehr, sondern nullbare Zeichenketten.
</para>
<itemizedlist>
<listitem>
<simpara>
<constant>PASSWORD_DEFAULT</constant> war int 1 und ist nun '2y' (in
PHP 7.4.0, 7.4.1 und 7.4.2 war es &null;)
</simpara>
</listitem>
<listitem>
<simpara>
<constant>PASSWORD_BCRYPT</constant> war int 1 und ist nun '2y'
</simpara>
</listitem>
<listitem>
<simpara>
<constant>PASSWORD_ARGON2I</constant> war int 2 und ist nun 'argon2i'
</simpara>
</listitem>
<listitem>
<simpara>
<constant>PASSWORD_ARGON2ID</constant> war int 3 und ist nun 'argon2id'
</simpara>
</listitem>
</itemizedlist>
<para>
Anwendungen, die die Konstanten PASSWORD_DEFAULT, PASSWORD_BCRYPT,
PASSWORD_ARGON2I und PASSWORD_ARGON2ID korrekt verwenden, werden weiterhin
korrekt funktionieren.
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.htmlentities">
<title>Die Funktion <function>htmlentities</function></title>
<para>
<function>htmlentities</function> erzeugt nun einen Hinweis (anstelle
einer Warnung wegen strikter Standards), wenn sie mit einer Kodierung
verwendet wird, bei der nur die Substitution von Basisentitäten
unterstützt wird. In diesem Fall entspricht das der Funktion
<function>htmlspecialchars</function>.
</para>
</sect3>
<sect3 xml:id="migration74.incompatible.core.fread-fwrite">
<title>Die Funktionen <function>fread</function> und <function>fwrite</function></title>
<para>
<function>fread</function> und <function>fwrite</function> geben nun
&false; zurück, wenn die Operation fehlgeschlagen ist; zuvor wurde eine
leere Zeichenkette oder 0 zurückgegeben. EAGAIN/EWOULDBLOCK werden nicht
als Fehler gewertet.
</para>
<para>
Diese Funktionen geben nun auch bei Fehlern eine Meldung aus, &zb; wenn
versucht wird, in eine schreibgeschützte Dateiressource zu schreiben.
</para>
</sect3>
</sect2>
<sect2 xml:id="migration74.incompatible.bcmath">
<title>BCMath mathematische Berechnungen mit beliebiger Genauigkeit</title>
<para>
BCMath-Funktionen erzeugen nun eine Warnung, wenn eine nicht wohlgeformte
Zahl übergeben wird, &zb; <literal>"32foo"</literal>. Der Parameter wird
wie bisher als Null interpretiert.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.curl">
<title>CURL</title>
<para>
Der Versuch, eine <classname>CURLFile</classname>-Klasse zu serialisieren,
erzeugt nun eine Exception. Zuvor wurde die Exception nur bei der
Deserialisierung ausgelöst.
</para>
<para>
Die Verwendung von <constant>CURLPIPE_HTTP1</constant> ist veraltet und
wird ab cURL 7.62.0 nicht mehr unterstützt.
</para>
<para>
Bei der Funktion <function>curl_version</function> ist der Parameter
<literal>$version</literal> veraltet. Wenn ein anderer Wert als der
Standardwert <constant>CURLVERSION_NOW</constant> übergeben wird, wird eine
Warnung ausgegeben und der Parameter wird ignoriert.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.datetime">
<title>Datum und Uhrzeit</title>
<para>
Der Aufruf von <function>var_dump</function> oder ähnlichem mit einer
Instanz von <classname>DateTime</classname> oder
<classname>DateTimeImmutable</classname> hinterlässt keine verfügbaren
Eigenschaften des Objekts mehr.
</para>
<para>
Der Vergleich von <classname>DateInterval</classname>-Objekten (mittels
<literal>==</literal>, <literal><</literal> usw.) erzeugt nun eine
Warnung und gibt immer &false; zurück. Zuvor wurden alle
<classname>DateInterval</classname>-Objekte als gleich angesehen, sofern
sie keine Eigenschaften hatten.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.intl">
<title>Intl</title>
<para>
Bei den Funktionen <function>idn_to_ascii</function> und
<function>idn_to_utf8</function> ist der Standardwert des Parameters nun
<constant>INTL_IDNA_VARIANT_UTS46</constant> anstelle des veralteten
<constant>INTL_IDNA_VARIANT_2003</constant>.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.mysqli">
<title>MySQLi</title>
<para>
Die integrierte Serverfunktionalität wurde entfernt. Sie war seit
mindestens PHP 7.0 fehlerhaft.
</para>
<para>
Die undokumentierte Eigenschaft <literal>mysqli::$stat</literal> wurde
zugunsten von <methodname>mysqli::stat</methodname> entfernt.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.openssl">
<title>OpenSSL</title>
<para>
Die Funktion <function>openssl_random_pseudo_bytes</function> löst nun
ähnlich wie <function>random_bytes</function> bei Fehlern eine Exception
aus. Insbesondere wird ein <classname>Error</classname> ausgelöst, wenn die
Anzahl der angeforderten Bytes kleiner oder gleich Null ist, und eine
<classname>Exception</classname> wird ausgelöst, wenn nicht genügend
Zufallsdaten gesammelt werden können. Wenn die Funktion keine Exception
wirft, ist der Ausgabeparameter <literal>$crypto_strong</literal>
garantiert immer &true;, weshalb eine explizite Überprüfung nicht nötig ist.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.pcre">
<title>Reguläre Ausdrücke (Perl-kompatibel)</title>
<para>
Wenn der Modus <constant>PREG_UNMATCHED_AS_NULL</constant> verwendet wird,
werden nicht gefundene Teilsuchmuster nun auch auf &null; gesetzt (oder
<literal>[null, -1]</literal>, wenn die Erfassung des Offsets aktiviert
ist). Das bedeutet, dass die Größe der <literal>$matches</literal>
(Übereinstimmungen) immer gleich ist.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.pdo">
<title>PHP-Datenobjekte (PDO)</title>
<para>
Der Versuch, eine Instanz von <classname>PDO</classname> oder
<classname>PDOStatement</classname> zu serialisieren, erzeugt nun eine
<classname>Exception</classname> anstelle einer
<classname>PDOException</classname>, was dem Verhalten anderer interner
Klassen entspricht, die keine Serialisierung unterstützen.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.reflection">
<title>Reflection</title>
<para>
Reflection-Objekte erzeugen nun eine Exception, wenn versucht wird, sie zu
serialisieren. Die Serialisierung von Reflection-Objekten wurde nie
unterstützt und führte zu beschädigten Reflection-Objekten. Sie ist nun
ausdrücklich verboten.
</para>
<para>
Die Werte der Klassenkonstanten von
<classname>ReflectionClassConstant</classname>,
<classname>ReflectionMethod</classname> und
<classname>ReflectionProperty</classname> haben sich geändert.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.spl">
<title>Standard-PHP-Bibliothek (SPL)</title>
<para>
Wenn die Funktion <function>get_object_vars</function> für eine Instanz von
<classname>ArrayObject</classname> aufgerufen wird, gibt sie nun immer die
Eigenschaften der Klasse <classname>ArrayObject</classname> selbst (oder
einer Unterklasse) zurück. Zuvor wurden die Werte des betreffenden
Arrays/Objekts zurückgegeben, es sei denn, das Flag
<constant>ArrayObject::STD_PROP_LIST</constant> wurde angegeben.
</para>
<para>
Andere betroffene Operationen sind:
</para>
<itemizedlist>
<listitem>
<simpara>
Die Methode <methodname>ReflectionObject::getProperties</methodname>
</simpara>
</listitem>
<listitem>
<simpara>
Die Funktionen <function>reset</function>, <function>current</function>
usw. Stattdessen sollten die Methoden von
<interfacename>Iterator</interfacename> verwendet werden.
</simpara>
</listitem>
<listitem>
<simpara>
Möglicherweise andere, die Objekteigenschaften als Liste bearbeiten, &zb;
die Funktion <function>array_walk</function>.
</simpara>
</listitem>
</itemizedlist>
<para>
Typumwandlungen mit <literal>(array)</literal> sind davon nicht betroffen.
Sie geben weiterhin entweder das betreffende Array oder die Eigenschaften
der Klasse <classname>ArrayObject</classname> zurück, je nachdem ob das
Flag <constant>ArrayObject::STD_PROP_LIST</constant> verwendet wird.
</para>
<para>
Die Methode <methodname>SplPriorityQueue::setExtractFlags</methodname> löst
eine Exception aus, wenn Null (<literal>0</literal>) übergeben wird. Zuvor
erzeugte dies bei der nächsten Extraktionsoperation einen behebbaren
schwerwiegenden Fehler.
</para>
<para>
Die Klassen <classname>ArrayObject</classname>,
<classname>ArrayIterator</classname>,
<classname>SplDoublyLinkedList</classname> und
<classname>SplObjectStorage</classname> unterstützen nun zusätzlich zur
Schnittstelle <interfacename>Serializable</interfacename> das Verfahren
<literal>__serialize()</literal> und <literal>__unserialize()</literal>.
Das bedeutet, dass die mit älteren PHP-Versionen serialisierten Daten immer
noch deserialisiert werden können, aber Daten, die mit PHP 7.4 erstellt
wurden, von älteren Versionen nicht verstanden werden.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.tokenizer">
<title>Tokenizer</title>
<para>
Die Funktion <function>token_get_all</function> gibt für unerwartete
Zeichen nun ein <constant>T_BAD_CHARACTER</constant>-Token aus, anstatt
Löcher im Token-Stream zu hinterlassen.
</para>
</sect2>
<sect2 xml:id="migration74.incompatible.cookie-decode">
<title>Eingehende Cookies</title>
<para>
Seit PHP 7.4.11 werden die <emphasis>Namen</emphasis> der eingehenden
Cookies aus Sicherheitsgründen nicht mehr URL-dekodiert.
</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
-->