-
Notifications
You must be signed in to change notification settings - Fork 39
/
deprecated.xml
278 lines (260 loc) · 9.45 KB
/
deprecated.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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ca9dbbbd2dcac26d56bbbb87539297e4589bd709 Maintainer: reinders Status: ready -->
<!-- Reviewed: yes -->
<sect1 xml:id="migration80.deprecated">
<title>Veraltete Features</title>
<sect2 xml:id="migration80.deprecated.core">
<title>PHP-Kern</title>
<itemizedlist>
<listitem>
<para>
Wenn nach einem Parameter mit einem Standardwert ein benötigter folgt,
hat der Standardwert keinen Effekt. Mit PHP 8.0.0 ist das veraltet und
kann durch das Entfernen des Standardwertes behoben werden, ohne dass
Funktionalität verloren geht:
</para>
<para>
<programlisting role="php">
<![CDATA[
<?php
function test($a = [], $b) {} // Vorher
function test($a, $b) {} // Danach
?>
]]>
</programlisting>
</para>
<para>
Eine Ausnahme der Regel stellen Parameter dar, welche der Form
<code>Typ $param = null</code> entsprechen, bei welcher die Vorgabe null
den Typ implizit nullbar macht. Diese Funktionalität bleibt erhalten, es
wird jedoch empfohlen, den Typ explizit nullbar zu machen:
</para>
<para>
<programlisting role="php">
<![CDATA[
<?php
function test(A $a = null, $b) {} // Noch erlaubt
function test(?A $a, $b) {} // Empfohlen
?>
]]>
</programlisting>
</para>
</listitem>
<listitem>
<para>
Das Aufrufen von <function>get_defined_functions</function> mit
<parameter>exclude_disabled</parameter> explizit auf &false; gesetzt, ist
veraltet und hat keine Wirkung mehr.
<function>get_defined_functions</function> erlaubt keine deaktivierten
Funktionen mehr.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="migration80.deprecated.enchant">
<title>Enchant</title>
<itemizedlist>
<listitem>
<para>
<function>enchant_broker_set_dict_path</function> und
<function>enchant_broker_get_dict_path</function> sind veraltet, da diese
Funktionalität in libenchant < 1.5 und libenchant-2 nicht mehr
vorhanden ist.
</para>
</listitem>
<listitem>
<para>
<function>enchant_dict_add_to_personal</function> ist veraltet.
<function>enchant_dict_add</function> ersetzt diese Funktion.
</para>
</listitem>
<listitem>
<para>
<function>enchant_dict_is_in_session</function> ist veraltet.
<function>enchant_dict_is_added</function> ersetzt diese Funktion.
</para>
</listitem>
<listitem>
<para>
<function>enchant_broker_free</function> und
<function>enchant_broker_free_dict</function> sind ebenfalls veraltet.
Das Objekt kann stattdessen mit <function>unset</function> gelöscht
werden.
</para>
</listitem>
<listitem>
<para>
Die Konstanten <constant>ENCHANT_MYSPELL</constant> und
<constant>ENCHANT_ISPELL</constant> sind veraltet.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="migration80.deprecated.libxml">
<title>LibXML</title>
<para>
<function>libxml_disable_entity_loader</function> ist veraltet. Da nun
jedoch libxml 2.9.0 vorausgesetzt wird, ist das externe Laden von Entitäten
garantiert standardmäßig deaktiviert, und diese Funktion wird nicht mehr
benötigt, um vor XXE-Angriffen zu schützen, es sei denn, das (immer noch
angreifbare) <constant>LIBXML_NOENT</constant> wird verwendet. In diesem
Fall ist es empfehlenswert, den Code unter Verwendung von
<function>libxml_set_external_entity_loader</function> zu überarbeiten, um
das Laden externer Entitäten zu unterdrücken.
</para>
</sect2>
<sect2 xml:id="migration80.deprecated.pgsql">
<title>PGSQL / PDO PGSQL</title>
<itemizedlist>
<listitem>
<para>
Die Konstante <constant>PGSQL_LIBPQ_VERSION_STR</constant> nimmt nun den
selben Wert an wie <constant>PGSQL_LIBPQ_VERSION</constant> und ist daher
veraltet.
</para>
</listitem>
<listitem>
<para>
Die Funktions-Aliase in der pgsql-Erweiterung sind veraltet. Die folgende
Liste zeigt, welche Funktionen stattdessen verwendet werden sollen.
</para>
<para>
<simplelist>
<member><function>pg_errormessage</function> → <function>pg_last_error</function></member>
<member><function>pg_numrows</function> → <function>pg_num_rows</function></member>
<member><function>pg_numfields</function> → <function>pg_num_fields</function></member>
<member><function>pg_cmdtuples</function> → <function>pg_affected_rows</function></member>
<member><function>pg_fieldname</function> → <function>pg_field_name</function></member>
<member><function>pg_fieldsize</function> → <function>pg_field_size</function></member>
<member><function>pg_fieldtype</function> → <function>pg_field_type</function></member>
<member><function>pg_fieldnum</function> → <function>pg_field_num</function></member>
<member><function>pg_result</function> → <function>pg_fetch_result</function></member>
<member><function>pg_fieldprtlen</function> → <function>pg_field_prtlen</function></member>
<member><function>pg_fieldisnull</function> → <function>pg_field_is_null</function></member>
<member><function>pg_freeresult</function> → <function>pg_free_result</function></member>
<member><function>pg_getlastoid</function> → <function>pg_last_oid</function></member>
<member><function>pg_locreate</function> → <function>pg_lo_create</function></member>
<member><function>pg_lounlink</function> → <function>pg_lo_unlink</function></member>
<member><function>pg_loopen</function> → <function>pg_lo_open</function></member>
<member><function>pg_loclose</function> → <function>pg_lo_close</function></member>
<member><function>pg_loread</function> → <function>pg_lo_read</function></member>
<member><function>pg_lowrite</function> → <function>pg_lo_write</function></member>
<member><function>pg_loreadall</function> → <function>pg_lo_read_all</function></member>
<member><function>pg_loimport</function> → <function>pg_lo_import</function></member>
<member><function>pg_loexport</function> → <function>pg_lo_export</function></member>
<member><function>pg_setclientencoding</function> → <function>pg_set_client_encoding</function></member>
<member><function>pg_clientencoding</function> -> <function>pg_client_encoding</function></member>
</simplelist>
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="migration80.deprecated.standard">
<title>Standard Library</title>
<itemizedlist>
<listitem>
<para>
Sortierend vergleichende Funktionen welche &true; oder &false;
zurückgeben, werden nun eine deprecation-Warnung zurückgeben und sollten
durch eine Implementation ersetzt werden, welche einen Integer
zurückgibt, der kleiner, gleich oder größer als 0 ist.
</para>
<para>
<programlisting role="php">
<![CDATA[
<?php
// Replace
usort($array, fn($a, $b) => $a > $b);
// With
usort($array, fn($a, $b) => $a <=> $b);
?>
]]>
</programlisting>
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="migration80.deprecated.zip">
<title>Zip</title>
<itemizedlist>
<listitem>
<para>
Die Verwendung einer leeren Datei als ZipArchive ist veraltet. Libzip
1.6.0 akzeptiert keine leeren Dateien als ZIP-Archive mehr. Der
existierende Workaround wird in der nächsten Version entfernt.
</para>
</listitem>
<listitem>
<para>
Die prozedurale API von Zip ist veraltet. Als Ersatz kann
<classname>ZipArchive</classname> genutzt werden. Die Iteration über alle
Entitäten kann durch den Einsatz von
<methodname>ZipArchive::statIndex</methodname> und einer
<link linkend="control-structures.for">for</link>-Schleife erreicht
werden:
</para>
<para>
<programlisting role="php">
<![CDATA[
<?php
// Iteration mit der prozedualen API
assert(is_resource($zip));
while ($entry = zip_read($zip)) {
echo zip_entry_name($entry);
}
// Iteration mit der Objekorientierten API
assert($zip instanceof ZipArchive);
for ($i = 0; $entry = $zip->statIndex($i); $i++) {
echo $entry['name'];
}
?>
]]>
</programlisting>
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="migration80.deprecated.reflection">
<title>Reflection</title>
<itemizedlist>
<listitem>
<para>
<methodname>ReflectionFunction::isDisabled</methodname> ist veraltet, da
es nicht mehr möglich ist, eine <classname>ReflectionFunction</classname>
für eine deaktivierte Funktion zu erstellen. Die Methode gibt nun immer
&false; zurück.
</para>
</listitem>
<listitem>
<para>
<methodname>ReflectionParameter::getClass</methodname>,
<methodname>ReflectionParameter::isArray</methodname>, und
<methodname>ReflectionParameter::isCallable</methodname> sind veraltet.
<methodname>ReflectionParameter::getType</methodname> und die
<classname>ReflectionType</classname>-APIs sollten stattdessen genutzt werden.
</para>
</listitem>
</itemizedlist>
</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
-->