Skip to content

Commit 1aa6f2a

Browse files
committed
New translation
1 parent 2ec8cc8 commit 1aa6f2a

1 file changed

Lines changed: 174 additions & 0 deletions

File tree

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- $Revision$ -->
3+
<!-- EN-Revision: 44b298ee5daf7c79a8e63c7e80ffe65232822838 Maintainer: samesch Status: ready -->
4+
5+
<sect2 xml:id="migration70.incompatible.error-handling">
6+
<title>Änderungen im Umgang mit Fehlern und Exceptions</title>
7+
8+
<para>
9+
Viele schwerwiegende und wiederherstellbare schwerwiegende Fehler wurden in
10+
PHP 7 in Exceptions umgewandelt. Diese Fehler-Exceptions erben von der
11+
Klasse <classname>Error</classname>, die ihrerseits die Schnittstelle
12+
<classname>Throwable</classname> implementiert. (die neue Basisschnittstelle,
13+
die alle Exceptions erben).
14+
</para>
15+
16+
<para>
17+
Dies bedeutet, dass benutzerdefinierte Funktionen für die Fehlerbehandlung
18+
eventuell nicht mehr ausgelöst werden, da stattdessen Exceptions ausgelöst
19+
werden (was neue schwerwiegende Fehler für nicht abgefangene
20+
<classname>Error</classname>-Exceptions verursacht).
21+
</para>
22+
23+
<para>
24+
Eine genauere Beschreibung der Funktionsweise von Fehlern in PHP 7 ist auf
25+
der Seite <link linkend="language.errors.php7">Fehler in PHP 7</link> zu
26+
finden. Dieser Migrationsleitfaden zählt lediglich die Änderungen auf, die
27+
die Abwärtskompatibilität betreffen.
28+
</para>
29+
30+
<sect3 xml:id="migration70.incompatible.error-handling.set-exception-handler">
31+
<title>
32+
Bei der Funktion <function>set_exception_handler</function> ist nicht mehr
33+
gewährleistet, dass sie <classname>Exception</classname>-Objekte erhält.
34+
</title>
35+
36+
<para>
37+
Code, der einen Exception-Handler mit der Funktion
38+
<function>set_exception_handler</function> unter Verwendung einer
39+
Deklaration vom Typ <classname>Exception</classname> implementiert, führt
40+
zu einem fatalen Fehler, wenn ein <classname>Error</classname>-Objekt
41+
ausgelöst wird.
42+
</para>
43+
44+
<para>
45+
Wenn der Handler sowohl mit PHP 5 als auch mit PHP 7 funktionieren soll,
46+
sollte die Typdeklaration aus dem Handler entfernt werden. Bei Code, der
47+
migriert wird, um nur unter PHP 7 zu funktionieren, genügt es stattdessen,
48+
die <classname>Exception</classname>-Typdeklaration durch
49+
<classname>Throwable</classname> zu ersetzen.
50+
</para>
51+
52+
<informalexample>
53+
<programlisting role="php">
54+
<![CDATA[
55+
<?php
56+
// PHP-Code, der nicht mehr funktioniert
57+
function handler(Exception $e) { ... }
58+
set_exception_handler('handler');
59+
60+
// PHP 5 und 7 kompatibel
61+
function handler($e) { ... }
62+
63+
// Nur PHP 7
64+
function handler(Throwable $e) { ... }
65+
?>
66+
]]>
67+
</programlisting>
68+
</informalexample>
69+
</sect3>
70+
71+
<sect3 xml:id="migration70.incompatible.error-handling.constructors">
72+
<title>Interne Konstruktoren lösen bei Fehlern immer Exceptions aus</title>
73+
74+
<para>
75+
Zuvor gaben einige interne Klassen &null; oder ein unbrauchbares Objekt
76+
zurück, wenn der Konstruktor fehlschlug. Alle internen Klassen lösen nun in
77+
einem solchen Fall eine <classname>Exception</classname> aus, so wie es die
78+
benutzerdefinierten Klassen bereits tun.
79+
</para>
80+
</sect3>
81+
82+
<sect3 xml:id="migration70.incompatible.error-handling.parse">
83+
<title>Parser-Fehler lösen <classname>ParseError</classname> aus</title>
84+
85+
<para>
86+
Parser-Fehler erzeugen nun ein <classname>ParseError</classname>-Objekt.
87+
Die Fehlerbehandlung für <function>eval</function> sollte einen
88+
&catch;-Block enthalten, der diesen Fehler behandeln kann.
89+
</para>
90+
</sect3>
91+
92+
<sect3 xml:id="migration70.incompatible.error-handling.strict">
93+
<title>Änderungen des Schweregrads von E_STRICT-Meldungen</title>
94+
95+
<para>
96+
Alle<constant>E_STRICT</constant>-Meldungen wurden neu eingestuft. Die
97+
Konstante <constant>E_STRICT</constant> wurde beibehalten, sodass Aufrufe
98+
wie <literal>error_reporting(E_ALL|E_STRICT)</literal> keinen Fehler
99+
verursachen.
100+
</para>
101+
<para>
102+
<table>
103+
<title>Änderungen des Schweregrads von E_STRICT-Meldungen</title>
104+
<tgroup cols="2">
105+
<thead>
106+
<row>
107+
<entry>Situation</entry>
108+
<entry>Neue Stufe/Verhalten</entry>
109+
</row>
110+
</thead>
111+
<tbody>
112+
<row>
113+
<entry>Indizierung durch eine Ressource</entry>
114+
<entry><constant>E_NOTICE</constant></entry>
115+
</row>
116+
<row>
117+
<entry>Abstrakte statische Methoden</entry>
118+
<entry>Hinweis entfernt, löst keinen Fehler aus</entry>
119+
</row>
120+
<row>
121+
<entry>"Neudefinieren" eines Konstruktors</entry>
122+
<entry>Hinweis entfernt, löst keinen Fehler aus</entry>
123+
</row>
124+
<row>
125+
<entry>Inkompatible Signaturen bei der Vererbung</entry>
126+
<entry><constant>E_WARNING</constant></entry>
127+
</row>
128+
<row>
129+
<entry>Gleiche (kompatible) Eigenschaft in zwei verwendeten Traits</entry>
130+
<entry>Hinweis entfernt, löst keinen Fehler aus</entry>
131+
</row>
132+
<row>
133+
<entry>Nicht-statischer Zugriff auf eine statische Eigenschaft</entry>
134+
<entry><constant>E_NOTICE</constant></entry>
135+
</row>
136+
<row>
137+
<entry>Nur Variablen sollten per Referenz zugewiesen werden</entry>
138+
<entry><constant>E_NOTICE</constant></entry>
139+
</row>
140+
<row>
141+
<entry>Nur Variablen sollten per Referenz übergeben werden</entry>
142+
<entry><constant>E_NOTICE</constant></entry>
143+
</row>
144+
<row>
145+
<entry>Statischer Aufruf nicht-statischer Methoden</entry>
146+
<entry><constant>E_DEPRECATED</constant></entry>
147+
</row>
148+
</tbody>
149+
</tgroup>
150+
</table>
151+
</para>
152+
</sect3>
153+
</sect2>
154+
155+
<!-- Keep this comment at the end of the file
156+
Local variables:
157+
mode: sgml
158+
sgml-omittag:t
159+
sgml-shorttag:t
160+
sgml-minimize-attributes:nil
161+
sgml-always-quote-attributes:t
162+
sgml-indent-step:1
163+
sgml-indent-data:t
164+
indent-tabs-mode:nil
165+
sgml-parent-document:nil
166+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
167+
sgml-exposed-tags:nil
168+
sgml-local-catalogs:nil
169+
sgml-local-ecat-files:nil
170+
End:
171+
vim600: syn=xml fen fdm=syntax fdl=2 si
172+
vim: et tw=78 syn=sgml
173+
vi: ts=1 sw=1
174+
-->

0 commit comments

Comments
 (0)