-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy patherrorcontrol.xml
More file actions
97 lines (95 loc) · 3.58 KB
/
errorcontrol.xml
File metadata and controls
97 lines (95 loc) · 3.58 KB
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 16934048f79c6e117cd16a23c09c1b2ea502e284 Maintainer: nobody Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: e4b889a3e8b9d87ab605aac9bbe85d2c16c69a1b Reviewer: samesch -->
<!-- CREDITS: tzwenny, betz -->
<sect1 xml:id="language.operators.errorcontrol">
<title>Operator zur Fehlerkontrolle</title>
<titleabbrev>Fehlerkontrolle</titleabbrev>
<simpara>
PHP unterstützt einen Operator für die Fehlerkontrolle: Das
<literal>@</literal>-Symbol. Stellt man das <literal>@</literal> in PHP vor
einen Ausdruck werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt
werden könnten, unterdrückt.
</simpara>
<para>
Wurde eine benutzerdefinierte Fehlerbehandlungsfunktion mit
<function>set_error_handler</function> definiert, wird sie auch dann
aufgerufen, wenn die Diagnose unterdrückt wurde.
</para>
<warning>
<para>
Vor PHP 8.0.0 gab die Funktion <function>error_reporting</function> bei
einem Aufruf innerhalb einer benutzerdefinierten Fehlerbehandlung immer
<literal>0</literal> zurück, wenn Fehler mit dem Operator
<literal>@</literal> unterdückt wurden. Seit PHP 8.0.0 gibt sie den Wert
dieses (bitweisen) Ausdrucks zurück:
<literal>E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE</literal>.
</para>
</warning>
<simpara>
Alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden, sind im
<literal>"message"</literal>-Element des Arrays, das von
<function>error_get_last</function> zurückgegeben wird, enthalten. Da sich
das Ergebnis dieser Funktion bei jedem Fehlers ändert, sollte es möglichst
früh geprüft werden.
</simpara>
<para>
<example>
<title>Absichtlicher Dateifehler</title>
<programlisting role="php">
<![CDATA[
<?php
$my_file = @file ('nicht_vorhandene_Datei') or
die ("Datei konnte nicht geöffnet werden: Fehler war:'" . error_get_last()['message'] . "'");
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Unterdrückende Ausdrücke</title>
<programlisting role="php">
<![CDATA[
<?php
// Das funktioniert bei jedem Ausdruck, nicht nur bei Funktionen:
$value = @$cache[$key];
// gibt keine Meldung aus, falls der Index $key nicht vorhanden ist.
?>
]]>
</programlisting>
</example>
</para>
<note>
<simpara>
Der @-Operator funktioniert nur bei
<link linkend="language.expressions">Ausdrücken</link>. Eine einfache
Daumenregel: wenn der Wert von etwas bestimmt werden kann, dann kann der
<literal>@</literal>-Operator davor geschrieben werden. Zum Beispiel kann
er vor Variablen gesetzt werden, vor Funktionsaufrufen, vor Aufrufen
bestimmter Sprachkonstrukte (&zb; <function>include</function>), und so
weiter. Nicht verwendet werden kann er vor Funktions- oder
Klassendefinitionen oder vor Kontrollstrukturen wie <literal>if</literal>
und &foreach; und so weiter.
</simpara>
</note>
<warning>
<para>
Vor PHP 8.0.0 war es möglich, kritische Fehler, die die Skriptausführung
beenden, mit dem <literal>@</literal>-Operator zu deaktivieren. Wenn zum
Beispiel <literal>@</literal> dem Aufruf einer Funktion vorangestellt wird,
die nicht existiert, weil sie nicht verfügbar ist oder falsch eingegeben
wurde, würde das Skript ohne Hinweis auf die Ursache abbrechen.
</para>
</warning>
<sect2 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>error_reporting</function></member>
<member><link linkend="ref.errorfunc">Fehlerbehandlungs- und Protokollierfunktionen</link></member>
</simplelist>
</para>
</sect2>
</sect1>