1
0
mirror of https://github.com/php/doc-de.git synced 2026-03-25 07:42:18 +01:00
Files

473 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2916fa4160bdf53bb316a5c7c018fc91df7cd951 Maintainer: cmb Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: dd522120279a5d08a8aeeaabfaafdea235991d72 Reviewer: samesch -->
<refentry xml:id="function.assert" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>assert</refname>
<refpurpose>Überprüft eine Assertion (Zusicherung)</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>assert</methodname>
<methodparam><type>mixed</type><parameter>assertion</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>Throwable</type><type>string</type><type>null</type></type><parameter>description</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
<function>assert</function> ermöglicht es, Expectations (Annahmen) zu
definieren: Zusicherungen, die in Entwicklungs- und Testumgebungen wirken,
aber so optimiert sind, dass sie in Produktionsumgebungen keinen
Mehraufwand verursachen.
</para>
<para>
Zusicherungen können zur Unterstützung der Fehlersuche verwendet werden.
So können sie &zb; für Plausibilitätsprüfungen für Vorbedingungen verwendet
werden, die immer &true; sein sollten, und die andernfalls auf
Programmierfehler hinweisen.
Ein weiterer Anwendungsfall ist, sicherzustellen, dass bestimmte Merkmale
wie Funktionen von Erweiterungen oder bestimmte Grenzwerte und Eigenschaften
des Systems vorhanden sind.
</para>
<para>
Da Zusicherungen so konfiguriert werden können, dass sie deaktiviert
werden, sollten sie <emphasis>nicht</emphasis> für normale
Laufzeitoperationen wie die Überprüfung von Eingabeparametern verwendet
werden. Als Faustregel gilt, dass sich der Code auch bei deaktivierter
Zusicherungsüberprüfung so verhalten sollte wie erwartet.
</para>
<para>
<function>assert</function> prüft, ob die in
<parameter>assertion</parameter> angegebene Annahme zutrifft. Wenn dies
nicht der Fall ist und das Ergebnis somit &false; ist, werden die
entsprechenden Maßnahmen ergriffen, je nachdem wie
<function>assert</function> konfiguriert wurde.
</para>
<para>
Das Verhalten von <function>assert</function> wird durch die folgenden
INI-Einstellungen bestimmt:
<table>
<title>&ConfigureOptions; für assert</title>
<tgroup cols="4">
<thead>
<row>
<entry>&Name;</entry>
<entry>&Default;</entry>
<entry>&Description;</entry>
<entry>&Changelog;</entry>
</row>
</thead>
<tbody>
<row>
<entry><link linkend="ini.zend.assertions">zend.assertions</link></entry>
<entry><literal>1</literal></entry>
<entry>
<simplelist>
<member>
<literal>1</literal>: erzeugt Code und führt ihn aus
(Entwicklungsmodus).
</member>
<member>
<!-- TODO: look up the RFC to figure out why you'd want this -->
<literal>0</literal>: erzeugt Code, aber führt ihn zur Laufzeit
nicht aus.
</member>
<member>
<literal>-1</literal>: erzeugt keinen Code (Produktionsmodus).
</member>
</simplelist>
</entry>
<entry/>
</row>
<row>
<entry><link linkend="ini.assert.active">assert.active</link></entry>
<entry>&true;</entry>
<entry>
Wenn &false;, prüft <function>assert</function> die Annahme nicht und
gibt automatisch &true; zurück.
</entry>
<entry>
Seit PHP 8.3.0 veraltet.
</entry>
</row>
<row>
<entry><link linkend="ini.assert.callback">assert.callback</link></entry>
<entry>&null;</entry>
<entry>
<para>
Eine benutzerdefinierte Funktion, die aufgerufen wird, wenn eine
Zusicherung fehlschlägt. Sie sollte die folgende Signatur haben:
<methodsynopsis role="procedural">
<type>void</type><methodname>assert_callback</methodname>
<methodparam><type>string</type><parameter>file</parameter></methodparam>
<methodparam><type>int</type><parameter>line</parameter></methodparam>
<methodparam><type>null</type><parameter>assertion</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>description</parameter></methodparam>
</methodsynopsis>
</para>
</entry>
<entry>
<para>
Vor PHP 8.0.0 musste die Signatur des Callbacks wie folgt lauten:
<methodsynopsis role="procedural">
<type>void</type><methodname>assert_callback</methodname>
<methodparam><type>string</type><parameter>file</parameter></methodparam>
<methodparam><type>int</type><parameter>line</parameter></methodparam>
<methodparam><type>string</type><parameter>assertion</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>description</parameter></methodparam>
</methodsynopsis>
</para>
<simpara>
Seit PHP 8.3.0 veraltet.
</simpara>
</entry>
</row>
<row>
<entry><link linkend="ini.assert.exception">assert.exception</link></entry>
<entry>&true;</entry>
<entry>
Wenn &true;, wird ein <classname>AssertionError</classname> ausgelöst,
wenn die Erwartung nicht erfüllt wird.
</entry>
<entry>
Seit PHP 8.3.0 veraltet.
</entry>
</row>
<row>
<entry><link linkend="ini.assert.bail">assert.bail</link></entry>
<entry>&false;</entry>
<entry>
Wenn &true;, wird die Ausführung des PHP-Skripts gestoppt, wenn die
Erwartung nicht erfüllt wird.
</entry>
<entry>
Seit PHP 8.3.0 veraltet.
</entry>
</row>
<row>
<entry><link linkend="ini.assert.warning">assert.warning</link></entry>
<entry>&true;</entry>
<entry>
Wenn &true;, wird eine <constant>E_WARNING</constant> ausgegeben, wenn
die Erwartung nicht erfüllt wird. Diese INI-Einstellung hat keine
Auswirkung, wenn
<link linkend="ini.assert.exception">assert.exception</link> aktiviert
ist.
</entry>
<entry>
Seit PHP 8.3.0 veraltet.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>assertion</parameter></term>
<listitem>
<para>
Dies ist ein beliebiger Ausdruck, der einen Wert zurückgibt, der
ausgeführt wird und dessen Ergebnis verwendet wird, um anzuzeigen, ob
die Zusicherung erfolgreich war oder fehlschlug.
</para>
<warning>
<para>
Vor PHP 8.0.0 wurde <parameter>assertion</parameter>, wenn es vom Typ
<type>string</type> war, als PHP-Code interpretiert und über
<function>eval</function> ausgeführt. Diese Zeichenkette wurde dann
als drittes Argument an den Callback übergeben. Dieses Verhalten war
in PHP 7.2.0 <emphasis>MISSBILLIGT</emphasis>, und wurde in PHP 8.0.0
<emphasis>ENTFERNT</emphasis>.
</para>
</warning>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>description</parameter></term>
<listitem>
<para>
Wenn <parameter>description</parameter> eine Instanz von
<classname>Throwable</classname> ist, wird sie nur ausgelöst, wenn die
<parameter>assertion</parameter> ausgeführt wird und fehlschlägt.
<note>
<para>
Seit PHP 8.0.0 wird dies durchgeführt <emphasis>bevor</emphasis> ein
möglicherweise definierter Zusicherungs-Callback aufgerufen wird.
</para>
</note>
<note>
<para>
Seit PHP 8.0.0 wird das &object; unabhängig von der Einstellung von
<link linkend="ini.assert.exception">assert.exception</link>
ausgelöst.
</para>
</note>
<note>
<para>
Seit PHP 8.0.0 hat die Einstellung von
<link linkend="ini.assert.bail">assert.bail</link> in diesem Fall
keine Wirkung mehr.
</para>
</note>
</para>
<para>
Wenn <parameter>description</parameter> vom Typ &string; ist, wird
diese Nachricht verwendet, wenn eine Exception oder eine Warnung
ausgegeben wird. Eine optionale Beschreibung, die in die Fehlermeldung
aufgenommen wird, wenn die <parameter>assertion</parameter>
fehlschlägt.
</para>
<para>
<parameter>description</parameter> kann weggelassen werden.
<!-- This does not happen if &null; is passed ... -->
Die Standardbeschreibung entspricht dem Quellcode für den Aufruf von
<function>assert</function> und wird zur Kompilierzeit erstellt.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Wenn mindestens eine der folgenden Bedingungen erfüllt ist, gibt
<function>assert</function> immer &true; zurück:
</para>
<simplelist>
<member><literal>zend.assertions=0</literal></member>
<member><literal>zend.assertions=-1</literal></member>
<member><literal>assert.active=0</literal></member>
<member><literal>assert.exception=1</literal></member>
<member><literal>assert.bail=1</literal></member>
<member>
An <parameter>description</parameter> wird ein benutzerdefiniertes
Exception-Objekt übergeben.
</member>
</simplelist>
<para>
Wenn keine der Bedingungen wahr ist, gibt <function>assert</function>
&true; zurück, sofern <parameter>assertion</parameter> wahr ist, ansonsten
&false;.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.3.0</entry>
<entry>
Alle INI-Einstellungen für <literal>assert.</literal> sind veraltet.
</entry>
</row>
<row>
<entry>8.0.0</entry>
<entry>
<function>assert</function> wertet Zeichenketten nicht mehr aus,
sondern behandelt sie stattdessen wie jeden anderen Parameter.
Anstelle von <code>assert('$a == $b')</code> sollte
<code>assert($a == $b)</code> verwendet werden. Die
&php.ini;-Direktive <literal>assert.quiet_eval</literal> und die
Konstante <constant>ASSERT_QUIET_EVAL</constant> wurden ebenfalls
entfernt, da sie keine Auswirkungen mehr haben.
</entry>
</row>
<row>
<entry>8.0.0</entry>
<entry>
Wenn <parameter>description</parameter> eine Instanz von
<classname>Throwable</classname> ist, wird nun ein Objekt ausgelöst,
wenn die Zusicherung fehlschlägt, unabhängig vom Wert von
<link linkend="ini.assert.exception">assert.exception</link>.
</entry>
</row>
<row>
<entry>8.0.0</entry>
<entry>
Wenn <parameter>description</parameter> eine Instanz von
<classname>Throwable</classname> ist, wird kein Benutzer-Callback
aufgerufen, auch wenn er gesetzt ist.
</entry>
</row>
<row>
<entry>8.0.0</entry>
<entry>
Die Deklaration einer Funktion namens <literal>assert()</literal>
innerhalb eines Namensraums ist nicht mehr erlaubt und führt zu einem
Fehler der Stufe <constant>E_COMPILE_ERROR</constant>.
</entry>
</row>
<row>
<entry>7.3.0</entry>
<entry>
Die Deklaration einer Funktion namens <literal>assert()</literal>
innerhalb eines Namensraums ist veraltet und gibt nun einen
<constant>E_DEPRECATED</constant>-Hinweis aus.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Die Verwendung eines &string;s als <parameter>assertion</parameter>
wird missbilligt. Dies erzeugt nun einen
<constant>E_DEPRECATED</constant>-Hinweis, wenn sowohl
<link linkend="ini.assert.active">assert.active</link> als auch
<link linkend="ini.zend.assertions">zend.assertions</link> auf
<literal>1</literal> gesetzt sind.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title><function>assert</function>-Beispiel</title>
<programlisting role="php">
<![CDATA[
<?php
assert(1 > 2);
echo 'Hi!';
]]>
</programlisting>
<para>
Falls Zusicherungen aktiviert sind
(<link linkend="ini.zend.assertions"><literal>zend.assertions=1</literal></link>),
gibt das obige Beispiel folgendes aus:
</para>
<screen>
<![CDATA[
Fatal error: Uncaught AssertionError: assert(1 > 2) in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'assert(1 > 2)')
#1 {main}
thrown in example.php on line 2
]]>
</screen>
<para>
Falls Zusicherungen deaktiviert sind (<literal>zend.assertions=0</literal>
oder <literal>zend.assertions=-1</literal>), gibt das obige Beispiel
folgendes aus:
</para>
<screen>
<![CDATA[
Hi!
]]>
</screen>
</example>
<example>
<title>Verwenden einer benutzerdefinierten Meldung</title>
<programlisting role="php">
<![CDATA[
<?php
assert(1 > 2, "Es wurde erwartet, dass eins größer ist als zwei");
echo 'Hi!';
]]>
</programlisting>
<para>
Falls Zusicherungen aktiviert sind, gibt das obige Beispiel folgendes aus:
</para>
<screen>
<![CDATA[
Fatal error: Uncaught AssertionError: Es wurde erwartet, dass eins größer ist als zwei in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'Es wurde erwartet,...')
#1 {main}
thrown in example.php on line 2
]]>
</screen>
<para>
Falls Zusicherungen deaktiviert sind, gibt das obige Beispiel folgendes aus:
</para>
<screen>
<![CDATA[
Hi!
]]>
</screen>
</example>
<example>
<title>Verwenden einer benutzerdefinierten Exception-Klasse</title>
<programlisting role="php">
<![CDATA[
<?php
class ArithmeticAssertionError extends AssertionError {}
assert(1 > 2, new ArithmeticAssertionError("Es wurde erwartet, dass eins größer ist als zwei"));
echo 'Hi!';
]]>
</programlisting>
<para>
Falls Zusicherungen aktiviert sind, gibt das obige Beispiel folgendes aus:
</para>
<screen>
<![CDATA[
Fatal error: Uncaught ArithmeticAssertionError: Es wurde erwartet, dass eins größer ist als zwei in example.php:4
Stack trace:
#0 {main}
thrown in example.php on line 4
]]>
</screen>
<para>
Falls Zusicherungen deaktiviert sind, gibt das obige Beispiel folgendes aus:
</para>
<screen>
<![CDATA[
Hi!
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>assert_options</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->