Skip to content

Commit a55bb4e

Browse files
committed
sync with EN; new translation
1 parent a1bcbf6 commit a55bb4e

5 files changed

Lines changed: 561 additions & 58 deletions

File tree

Lines changed: 375 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,375 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- $Revision$ -->
3+
<!-- EN-Revision: 6f41560bf19de74e2dfbc78f4175d35f5b378abe Maintainer: samesch Status: ready -->
4+
5+
<sect1 xml:id="migration74.incompatible" xmlns:xlink="http://www.w3.org/1999/xlink">
6+
<title>Nicht abwärtskompatible Änderungen</title>
7+
8+
<sect2 xml:id="migration74.incompatible.core">
9+
<title>PHP-Kern</title>
10+
11+
<sect3 xml:id="migration74.incompatible.core.non-array-access">
12+
<title>Zugriff auf Nicht-Arrays im Array-Stil</title>
13+
14+
<para>
15+
Der Versuch, Werte vom Typ <type>null</type>, <type>bool</type>,
16+
<type>int</type>, <type>float</type> oder <type>resource</type> wie ein
17+
Array zu verwenden, (z. B. <literal>$null["key"]</literal>) erzeugt nun
18+
einen Hinweis.
19+
</para>
20+
</sect3>
21+
22+
<sect3 xml:id="migration74.incompatible.core.get-declared-classes">
23+
<title>Die Funktion <function>get_declared_classes</function></title>
24+
25+
<para>
26+
<function>get_declared_classes</function> gibt keine anonymen Klassen mehr
27+
zurück, die noch nicht instanziiert wurden.
28+
</para>
29+
</sect3>
30+
31+
<sect3 xml:id="migration74.incompatible.core.fn">
32+
<title>Das Schlüsselwort <literal>fn</literal></title>
33+
34+
<para>
35+
<literal>fn</literal> ist nun ein reserviertes Schlüsselwort. Insbesondere
36+
kann es nicht mehr als Funktions- oder Klassenname verwendet werden.
37+
Es kann weiterhin als Name einer Methode oder Klassenkonstante verwendet
38+
werden.
39+
</para>
40+
</sect3>
41+
42+
<sect3 xml:id="migration74.incompatible.core.php-tag">
43+
<title><literal>&lt;?php</literal>-Tag am Ende der Datei</title>
44+
45+
<para>
46+
Das Tag <literal>&lt;?php</literal> am Ende der Datei (ohne nachgestellten
47+
Zeilenumbruch) wird nun als ein öffnendes PHP-Tag interpretiert. Zuvor
48+
wurde es entweder als kurzes öffnendes Tag gefolgt vom Literal
49+
<literal>php</literal> interpretiert und führte zu einem Syntaxfehler (bei
50+
<literal>short_open_tag=1</literal>) oder es wurde als literale
51+
Zeichenkette <literal>&lt;?php</literal> interpretiert (bei
52+
<literal>short_open_tag=0</literal>).
53+
</para>
54+
</sect3>
55+
56+
<sect3 xml:id="migration74.incompatible.core.stream-wrappers">
57+
<title>Stream-Wrapper</title>
58+
59+
<para>
60+
Wenn include/require für einen Stream verwendet wird, wird
61+
<methodname>streamWrapper::stream_set_option</methodname> mit der Option
62+
<constant>STREAM_OPTION_READ_BUFFER</constant> aufgerufen. Bei einem
63+
benutzerdefinierten Stream-Wrapper kann es notwendig sein, die Methode
64+
<methodname>streamWrapper::stream_set_option</methodname> zu
65+
implementieren, um eine Warnung zu vermeiden (eine Implementierung, die
66+
immer &false; zurückgibt, ist normalerweise ausreichend).
67+
</para>
68+
</sect3>
69+
70+
<sect3 xml:id="migration74.incompatible.core.serialization">
71+
<title>Serialisierung</title>
72+
73+
<para>
74+
Das Serialisierungsformat <literal>o</literal> wurde entfernt. Da es von
75+
PHP nie erzeugt wurde, kann dies nur die Deserialisierung von manuell
76+
erstellten Zeichenketten beeinträchtigen.
77+
</para>
78+
</sect3>
79+
80+
<sect3 xml:id="migration74.incompatible.core.password-algorithm-constants">
81+
<title>Konstanten für den Passwort-Algorithmus</title>
82+
83+
<para>
84+
Die Bezeichner der Algorithmen für das Hashing von Passwörtern sind nun
85+
keine Ganzzahlen mehr, sondern nullbare Zeichenketten.
86+
</para>
87+
88+
<itemizedlist>
89+
<listitem>
90+
<simpara>
91+
<constant>PASSWORD_DEFAULT</constant> war int 1 und ist nun &null;
92+
</simpara>
93+
</listitem>
94+
<listitem>
95+
<simpara>
96+
<constant>PASSWORD_BCRYPT</constant> war int 1 und ist nun '2y'
97+
</simpara>
98+
</listitem>
99+
<listitem>
100+
<simpara>
101+
<constant>PASSWORD_ARGON2I</constant> war int 2 und ist nun 'argon2i'
102+
</simpara>
103+
</listitem>
104+
<listitem>
105+
<simpara>
106+
<constant>PASSWORD_ARGON2ID</constant> war int 3 und ist nun 'argon2id'
107+
</simpara>
108+
</listitem>
109+
</itemizedlist>
110+
111+
<para>
112+
Anwendungen, die die Konstanten PASSWORD_DEFAULT, PASSWORD_BCRYPT,
113+
PASSWORD_ARGON2I und PASSWORD_ARGON2ID korrekt verwenden, werden weiterhin
114+
korrekt funktionieren.
115+
</para>
116+
</sect3>
117+
118+
<sect3 xml:id="migration74.incompatible.core.htmlentities">
119+
<title>Die Funktion <function>htmlentities</function></title>
120+
121+
<para>
122+
<function>htmlentities</function> erzeugt nun einen Hinweis (anstelle
123+
einer Warnung wegen strikter Standards), wenn sie mit einer Kodierung
124+
verwendet wird, bei der nur die Substitution von Basisentitäten
125+
unterstützt wird. In diesem Fall entspricht das der Funktion
126+
<function>htmlspecialchars</function>.
127+
</para>
128+
</sect3>
129+
130+
<sect3 xml:id="migration74.incompatible.core.fread-fwrite">
131+
<title>Die Funktionen <function>fread</function> und <function>fwrite</function></title>
132+
133+
<para>
134+
<function>fread</function> und <function>fwrite</function> geben nun
135+
&false; zurück, wenn die Operation fehlgeschlagen ist; zuvor wurde eine
136+
leere Zeichenkette oder 0 zurückgegeben. EAGAIN/EWOULDBLOCK werden nicht
137+
als Fehler gewertet.
138+
</para>
139+
<para>
140+
Diese Funktionen geben nun auch bei Fehlern eine Meldung aus, z. B. wenn
141+
versucht wird, in eine schreibgeschützte Dateiressource zu schreiben.
142+
</para>
143+
</sect3>
144+
145+
</sect2>
146+
147+
<sect2 xml:id="migration74.incompatible.bcmath">
148+
<title>BCMath mathematische Berechnungen mit beliebiger Genauigkeit</title>
149+
150+
<para>
151+
BCMath-Funktionen erzeugen nun eine Warnung, wenn eine nicht wohlgeformte
152+
Zahl übergeben wird, z. B. <literal>"32foo"</literal>. Der Parameter wird
153+
wie bisher als Null interpretiert.
154+
</para>
155+
</sect2>
156+
157+
<sect2 xml:id="migration74.incompatible.curl">
158+
<title>CURL</title>
159+
160+
<para>
161+
Der Versuch, eine <classname>CURLFile</classname>-Klasse zu serialisieren,
162+
erzeugt nun eine Exception. Zuvor wurde die Exception nur bei der
163+
Deserialisierung ausgelöst.
164+
</para>
165+
<para>
166+
Die Verwendung von <constant>CURLPIPE_HTTP1</constant> ist veraltet und
167+
wird ab cURL 7.62.0 nicht mehr unterstützt.
168+
</para>
169+
<para>
170+
Bei der Funktion <function>curl_version</function> ist der Parameter
171+
<literal>$version</literal> veraltet. Wenn ein anderer Wert als der
172+
Standardwert <constant>CURLVERSION_NOW</constant> übergeben wird, wird eine
173+
Warnung ausgegeben und der Parameter wird ignoriert.
174+
</para>
175+
</sect2>
176+
177+
<sect2 xml:id="migration74.incompatible.datetime">
178+
<title>Datum und Uhrzeit</title>
179+
180+
<para>
181+
Der Aufruf von <function>var_dump</function> oder ähnlichem mit einer
182+
Instanz von <classname>DateTime</classname> oder
183+
<classname>DateTimeImmutable</classname> hinterlässt keine verfügbaren
184+
Eigenschaften des Objekts mehr.
185+
</para>
186+
<para>
187+
Der Vergleich von <classname>DateInterval</classname>-Objekten (mittels
188+
<literal>==</literal>, <literal>&lt;</literal> usw.) erzeugt nun eine
189+
Warnung und gibt immer &false; zurück. Zuvor wurden alle
190+
<classname>DateInterval</classname>-Objekte als gleich angesehen, sofern
191+
sie keine Eigenschaften hatten.
192+
</para>
193+
</sect2>
194+
195+
<sect2 xml:id="migration74.incompatible.intl">
196+
<title>Intl</title>
197+
198+
<para>
199+
Bei den Funktionen <function>idn_to_ascii</function> und
200+
<function>idn_to_utf8</function> ist der Standardwert des Parameters nun
201+
<constant>INTL_IDNA_VARIANT_UTS46</constant> anstelle des veralteten
202+
<constant>INTL_IDNA_VARIANT_2003</constant>.
203+
</para>
204+
</sect2>
205+
206+
<sect2 xml:id="migration74.incompatible.mysqli">
207+
<title>MySQLi</title>
208+
209+
<para>
210+
Die integrierte Serverfunktionalität wurde entfernt. Sie war seit
211+
mindestens PHP 7.0 fehlerhaft.
212+
</para>
213+
<para>
214+
Die undokumentierte Eigenschaft <literal>mysqli::$stat</literal> wurde
215+
zugunsten von <methodname>mysqli::stat</methodname> entfernt.
216+
</para>
217+
</sect2>
218+
219+
<sect2 xml:id="migration74.incompatible.openssl">
220+
<title>OpenSSL</title>
221+
222+
<para>
223+
Die Funktion <function>openssl_random_pseudo_bytes</function> löst nun
224+
ähnlich wie <function>random_bytes</function> bei Fehlern eine Exception
225+
aus. Insbesondere wird ein <classname>Error</classname> ausgelöst, wenn die
226+
Anzahl der angeforderten Bytes kleiner oder gleich Null ist, und eine
227+
<classname>Exception</classname> wird ausgelöst, wenn nicht genügend
228+
Zufallsdaten gesammelt werden können. Wenn die Funktion nicht auslöst, ist
229+
der Parameter <literal>$crypto_strong output</literal> garantiert immer
230+
&true;, weshalb eine explizite Überprüfung nicht nötig ist.
231+
</para>
232+
</sect2>
233+
234+
<sect2 xml:id="migration74.incompatible.pcre">
235+
<title>Reguläre Ausdrücke (Perl-kompatibel)</title>
236+
237+
<para>
238+
Wenn der Modus <constant>PREG_UNMATCHED_AS_NULL</constant> verwendet wird,
239+
werden nicht gefundene Teilsuchmuster nun auch auf &null; gesetzt (oder
240+
<literal>[null, -1]</literal>, wenn die Erfassung des Offsets aktiviert
241+
ist). Das bedeutet, dass die Größe der <literal>$matches</literal>
242+
(Übereinstimmungen) immer gleich ist.
243+
</para>
244+
</sect2>
245+
246+
<sect2 xml:id="migration74.incompatible.pdo">
247+
<title>PHP-Datenobjekte (PDO)</title>
248+
249+
<para>
250+
Der Versuch, eine Instanz von <classname>PDO</classname> oder
251+
<classname>PDOStatement</classname> zu serialisieren, erzeugt nun eine
252+
<classname>Exception</classname> anstelle einer
253+
<classname>PDOException</classname>, was dem Verhalten anderer interner
254+
Klassen entspricht, die keine Serialisierung unterstützen.
255+
</para>
256+
</sect2>
257+
258+
<sect2 xml:id="migration74.incompatible.reflection">
259+
<title>Reflection</title>
260+
261+
<para>
262+
Reflection-Objekte erzeugen nun eine Exception, wenn versucht wird, sie zu
263+
serialisieren. Die Serialisierung von Reflection-Objekten wurde nie
264+
unterstützt und führte zu beschädigten Reflection-Objekten. Sie ist nun
265+
ausdrücklich verboten.
266+
</para>
267+
268+
<para>
269+
Die Werte der Klassenkonstanten von
270+
<classname>ReflectionClassConstant</classname>,
271+
<classname>ReflectionMethod</classname> und
272+
<classname>ReflectionProperty</classname> haben sich geändert.
273+
</para>
274+
</sect2>
275+
276+
<sect2 xml:id="migration74.incompatible.spl">
277+
<title>Standard-PHP-Bibliothek (SPL)</title>
278+
279+
<para>
280+
Wenn die Funktion <function>get_object_vars</function> für eine Instanz von
281+
<classname>ArrayObject</classname> aufgerufen wird, gibt sie nun immer die
282+
Eigenschaften der Klasse <classname>ArrayObject</classname> selbst (oder
283+
einer Unterklasse) zurück. Zuvor wurden die Werte des betreffenden
284+
Arrays/Objekts zurückgegeben, es sei denn, das Flag
285+
<constant>ArrayObject::STD_PROP_LIST</constant> wurde angegeben.
286+
</para>
287+
<para>
288+
Andere betroffene Operationen sind:
289+
</para>
290+
<itemizedlist>
291+
<listitem>
292+
<simpara>
293+
Die Methode <methodname>ReflectionObject::getProperties</methodname>
294+
</simpara>
295+
</listitem>
296+
<listitem>
297+
<simpara>
298+
Die Funktionen <function>reset</function>, <function>current</function>
299+
usw. Stattdessen sollten die Methoden von
300+
<interfacename>Iterator</interfacename> verwendet werden.
301+
</simpara>
302+
</listitem>
303+
<listitem>
304+
<simpara>
305+
Möglicherweise andere, die Objekteigenschaften als Liste bearbeiten,
306+
z. B. die Funktion <function>array_walk</function>.
307+
</simpara>
308+
</listitem>
309+
</itemizedlist>
310+
<para>
311+
Typumwandlungen mit <literal>(array)</literal> sind davon nicht betroffen.
312+
Sie geben weiterhin entweder das betreffende Array oder die Eigenschaften
313+
der Klasse <classname>ArrayObject</classname> zurück, je nachdem ob das
314+
Flag <constant>ArrayObject::STD_PROP_LIST</constant> verwendet wird.
315+
</para>
316+
<para>
317+
Die Methode <methodname>SplPriorityQueue::setExtractFlags</methodname> löst
318+
eine Exception aus, wenn Null (<literal>0</literal>) übergeben wird. Zuvor
319+
erzeugte dies bei der nächsten Extraktionsoperation einen behebbaren
320+
schwerwiegenden Fehler.
321+
</para>
322+
<para>
323+
Die Klassen <classname>ArrayObject</classname>,
324+
<classname>ArrayIterator</classname>,
325+
<classname>SplDoublyLinkedList</classname> und
326+
<classname>SplObjectStorage</classname> unterstützen nun zusätzlich zur
327+
Schnittstelle <interfacename>Serializable</interfacename> das Verfahren
328+
<literal>__serialize()</literal> und <literal>__unserialize()</literal>.
329+
Das bedeutet, dass die mit älteren PHP-Versionen serialisierten Daten immer
330+
noch deserialisiert werden können, aber Daten, die mit PHP 7.4 erstellt
331+
wurden, von älteren Versionen nicht verstanden werden.
332+
</para>
333+
</sect2>
334+
335+
<sect2 xml:id="migration74.incompatible.tokenizer">
336+
<title>Tokenizer</title>
337+
338+
<para>
339+
Die Funktion <function>token_get_all</function> gibt für unerwartete
340+
Zeichen nun ein <constant>T_BAD_CHARACTER</constant>-Token aus, anstatt
341+
Löcher im Token-Stream zu hinterlassen.
342+
</para>
343+
</sect2>
344+
345+
<sect2 xml:id="migration74.incompatible.cookie-decode">
346+
<title>Eingehende Cookies</title>
347+
348+
<para>
349+
Seit PHP 7.4.11 werden die <emphasis>Namen</emphasis> der eingehenden
350+
Cookies aus Sicherheitsgründen nicht mehr URL-dekodiert.
351+
</para>
352+
</sect2>
353+
354+
</sect1>
355+
356+
<!-- Keep this comment at the end of the file
357+
Local variables:
358+
mode: sgml
359+
sgml-omittag:t
360+
sgml-shorttag:t
361+
sgml-minimize-attributes:nil
362+
sgml-always-quote-attributes:t
363+
sgml-indent-step:1
364+
sgml-indent-data:t
365+
indent-tabs-mode:nil
366+
sgml-parent-document:nil
367+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
368+
sgml-exposed-tags:nil
369+
sgml-local-catalogs:nil
370+
sgml-local-ecat-files:nil
371+
End:
372+
vim600: syn=xml fen fdm=syntax fdl=2 si
373+
vim: et tw=78 syn=sgml
374+
vi: ts=1 sw=1
375+
-->

0 commit comments

Comments
 (0)