<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration71.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'migration71.incompatible.php',
    1 => 'Nicht abw&auml;rtskompatible &Auml;nderungen',
    2 => 'Nicht abw&auml;rtskompatible &Auml;nderungen',
  ),
  'up' => 
  array (
    0 => 'migration71.php',
    1 => 'Migration von PHP 7.0.x nach PHP 7.1.x',
  ),
  'prev' => 
  array (
    0 => 'migration71.constants.php',
    1 => 'Neue globale Konstanten',
  ),
  'next' => 
  array (
    0 => 'migration71.deprecated.php',
    1 => 'Veraltete Features in PHP 7.1.x',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'appendices/migration71/incompatible.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration71.incompatible" class="sect1">
 <h2 class="title">Nicht abwärtskompatible Änderungen</h2>

 <div class="sect2" id="migration71.incompatible.too-few-arguments-exception">
  <h3 class="title">Übergabe von zu wenig Funktionsparametern löst Fehler aus</h3>

  <p class="para">
   Bisher wurde eine Warnung ausgegeben, wenn eine benutzerdefinierte Funktion
   mit zu wenig Parametern aufgerufen wurde, nun wird statt einer Warnung eine
   Error-Exception ausgelöst. Diese Änderung gilt nur für benutzerdefinierte
   Funktionen und wirkt sich nicht auf interne Funktionen aus:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">){}<br /></span><span style="color: #0000BB">test</span><span style="color: #007700">();</span></span></code></div>
   </div>

   <p class="para">Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in %s on line %d and exactly 1 expected in %s:%d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.forbid-dynamic-calls-to-scope-introspection-functions">
  <h3 class="title">Verbot dynamischer Aufrufe von Funktionen, die Geltungsbereiche untersuchen</h3>

  <p class="para">
   Bei bestimten Funktionen sind dynamische Aufrufe (in der Form
   <code class="literal">$func()</code> oder <code class="literal">array_map(&#039;extract&#039;, ...)</code>
   usw.) nicht mehr zulässig. Dies gilt für Funktionen, die einen anderen
   Bereich prüfen oder ändern und dadurch ein mehrdeutiges und undefiniertes
   Verhalten verursachen. Von dieser Änderung sind folgende Funktionen
   betroffen:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.assert.php" class="function">assert()</a></span> - mit einer Zeichenkette als erstem Parameter
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.compact.php" class="function">compact()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.extract.php" class="function">extract()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.get-defined-vars.php" class="function">get_defined_vars()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.mb-parse-str.php" class="function">mb_parse_str()</a></span> - mit einem Parameter
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.parse-str.php" class="function">parse_str()</a></span> - mit einem Parameter
    </span>
   </li>
  </ul>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">(function () {<br />    </span><span style="color: #0000BB">$func </span><span style="color: #007700">= </span><span style="color: #DD0000">'func_num_args'</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$func</span><span style="color: #007700">();<br />})();</span></span></code></div>
   </div>

   <p class="para">Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Warning: Cannot call func_num_args() dynamically in %s on line %d
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.invalid-class-names">
  <h3 class="title">Ungültige Namen für Klassen, Schnittstellen und Traits</h3>

  <p class="para">
   Die folgenden Bezeichnungen können nicht als Namen für Klassen,
   Schnittstellen oder Traits verwendet werden:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span></span>
   </li>
   <li class="listitem">
    <span class="simpara"><span class="type"><a href="language.types.iterable.php" class="type iterable">iterable</a></span></span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.numerical-strings-scientific-notation">
  <h3 class="title">Umwandlung numerischer Zeichenketten berücksichtigt wissenschaftliche Notation</h3>

  <p class="para">
   Ganzzahlige Operationen und Umwandlungen berücksichtigen bei numerischen
   Zeichenketten nun die wissenschaftliche Notation. Dies beinhaltet auch die
   Umwandlung per <code class="literal">(int)</code> und die folgenden Funktionen:
   <span class="function"><a href="function.intval.php" class="function">intval()</a></span> (mit Basis 10), <span class="function"><a href="function.settype.php" class="function">settype()</a></span>,
   <span class="function"><a href="function.decbin.php" class="function">decbin()</a></span>, <span class="function"><a href="function.decoct.php" class="function">decoct()</a></span> und
   <span class="function"><a href="function.dechex.php" class="function">dechex()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fixes-to-mt_rand-algorithm">
  <h3 class="title">Korrekturen beim Algorithmus von <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span></h3>

  <p class="para">
   Die Funktion <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> verwendet nun standardmäßig die
   korrigierte Version des Mersenne-Twister-Algorithmus. Bei Code, der sich
   auf die deterministische Ausgabe von <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> verlässt,
   kann <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span> mit der Konstante
   <strong><code><a href="random.constants.php#constant.mt-rand-php">MT_RAND_PHP</a></code></strong> als zweitem, optionalem Parameter
   verwendet werden, um das alte (fehlerhafte) Verhalten zu wiederherzustellen.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.rand-srand-aliases">
  <h3 class="title">
   <span class="function"><a href="function.rand.php" class="function">rand()</a></span> und <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> werden zu Aliasen für
   <span class="function"><a href="function.srand.php" class="function">srand()</a></span> bzw. <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>
  </h3>

  <p class="para">
   Die Funktionen <span class="function"><a href="function.rand.php" class="function">rand()</a></span> und <span class="function"><a href="function.srand.php" class="function">srand()</a></span>
   sind nun Aliase für <span class="function"><a href="function.mt-rand.php" class="function">mt_rand()</a></span> bzw.
   <span class="function"><a href="function.mt-srand.php" class="function">mt_srand()</a></span>. Das bedeutet, dass sich die Ausgabe der
   folgenden Funktionen geändert hat: <span class="function"><a href="function.rand.php" class="function">rand()</a></span>,
   <span class="function"><a href="function.shuffle.php" class="function">shuffle()</a></span>, <span class="function"><a href="function.str-shuffle.php" class="function">str_shuffle()</a></span> und
   <span class="function"><a href="function.array-rand.php" class="function">array_rand()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.delete-control-character-in-identifiers">
  <h3 class="title">Das ASCII-Steuerzeichen Delete darf nicht in Bezeichnern verwendet werden</h3>

  <p class="para">
   Das ASCII-Steuerzeichen Delete (<code class="literal">0x7F</code>) darf nicht mehr in
   Bezeichnern verwendet werden, die nicht in Anführungszeichen stehen.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.error_log-syslog">
  <h3 class="title">
   Änderungen bei <code class="literal">syslog</code> als
   <code class="parameter">error_log</code>
  </h3>

  <p class="para">
   Wenn die INI-Einstellung <code class="parameter">error_log</code> auf
   <code class="literal">syslog</code> gesetzt ist, werden die PHP-Fehlerstufen den
   entsprechenden Fehlerstufen von syslog zugeordnet. Dies führt im Vergleich
   zum vorherigen Ansatz, bei dem alle Fehler nur auf der Ebene der
   Benachrichtigung protokolliert wurden, zu einer feineren Differenzierung
   in den Fehlerprotokollen.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.dont-call-destructors">
  <h3 class="title">Destruktoren werden bei unvollständigen Objekten nicht aufgerufen</h3>

  <p class="para">
   Für ein Objekt, das während der Ausführung seines Konstruktors eine
   Ausnahme auslöst, wird nun kein Destruktor mehr aufgerufen. Zuvor hing
   dieses Verhalten davon ab, ob das Objekt außerhalb des Konstruktors
   referenziert wurde (z. B. durch ein Exception-Backtrace).
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.call_user_func-with-ref-args">
  <h3 class="title">
   Behandlung von per Referenz übegebenen Parametern durch
   <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span>
  </h3>

  <p class="para">
   Die Funktion <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> erzeugt nun immer eine
   Warnung, wenn sie für Funktionen aufgerufen wird, die Parameter per
   Referenz entgegennimmt. Vorher hing das Verhalten davon ab, ob der Aufruf
   vollständig definiert war oder nicht.
  </p>
  <p class="para">
   Außerdem unterbrechen <span class="function"><a href="function.call-user-func.php" class="function">call_user_func()</a></span> und
   <span class="function"><a href="function.call-user-func-array.php" class="function">call_user_func_array()</a></span> den Funktionsaufruf in diesem
   Fall nicht mehr. Es wird zwar die Warnung &quot;expected reference&quot; ausgegeben,
   aber der Aufruf wird wie gewohnt fortgesetzt.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-index-operator">
  <h3 class="title">Der leere Indexoperator ist nicht mehr auf Zeichenketten anwendbar</h3>

  <p class="para">
   Die Anwendung des leeren Indexoperators auf eine Zeichenkette (z. B.
   <code class="literal">$str[] = $x</code>) führt zu einem fatalen Fehler. In früheren
   Versionen wurde die Zeichenkette stattdessen stillschweigend in ein Array
   umgewandelt.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.empty-string-modifcation-by-character">
  <h3 class="title">Zuweisen eines Wertes an eine leere Zeichenkette über den Index der Zeichenkette</h3>

  <p class="para">
   Eine Zeichenkette kann nun genauso verändert werden wie eine nicht-leere,
   d. h., wenn in einen Offset außerhalb der Zeichenkette geschrieben werden
   soll, wird dieser mit Leerzeichen aufgefüllt. Dabei werden
   nicht-ganzzahlige Typen in Integer umgewandelt und nur das erste Zeichen
   der zugewiesenen Zeichenkette wird verwendet. Zuvor wurden leere
   Zeichenketten stillschweigend wie ein leeres Array behandelt.
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">] = </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="para">Das oben gezeigte Beispiel erzeugt mit PHP 7.0 folgende Ausgabe:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(1) {
  [10]=&gt;
  string(3) &quot;foo&quot;
}
</pre></div>
    </div>
    <p class="para">Das oben gezeigte Beispiel erzeugt mit PHP 7.1 folgende Ausgabe:</p>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;          f&quot;
</pre></div>
    </div>
   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.removed-ini-directives">
  <h3 class="title">Entfernte INI-Direktiven</h3>

  <p class="para">
   Die folgenden INI-Direktiven wurden entfernt:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_file</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.entropy_length</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_function</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="parameter">session.hash_bits_per_character</code>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration71.incompatible.array-order">
  <h3 class="title">
   Die Reihenfolge der Array-Elemente, die automatisch durch Referenzzuweisung
   erstellt werden, wurde geändert
  </h3>

  <p class="para">
   Die Reihenfolge der Elemente, die in einem Array durch Zuweisung per
   Referenz automatisch erstellt wurden, hat sich geändert. Zum Beispiel:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$array </span><span style="color: #007700">= [];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"a"</span><span style="color: #007700">] =&amp; </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">"b"</span><span style="color: #007700">] = </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">Das oben gezeigte Beispiel erzeugt mit PHP 7.0 folgende Ausgabe:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;a&quot;]=&gt;
  &amp;int(1)
  [&quot;b&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
   <p class="para">Das oben gezeigte Beispiel erzeugt mit PHP 7.1 folgende Ausgabe:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [&quot;b&quot;]=&gt;
  &amp;int(1)
  [&quot;a&quot;]=&gt;
  &amp;int(1)
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration71.incompatible.sort-order">
  <h3 class="title">Sortierreihenfolge gleichwertiger Elemente</h3>
  <p class="para">
   Aufgrund von Verbesserungen des internen Sortieralgorithmus kann sich die
   Sortierreihenfolge von Elementen, die beim Vergleich als gleichwertig
   betrachtet werden, im Vergleich zu vorherigen Versionen ändern.
  </p>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Es wird davon abgeraten, sich auf die Reihenfolge der Elemente, die als
    gleichwertig betrachtet werden, zu verlassen; sie kann sich jederzeit
    ändern.
   </p>
  </p></blockquote>
 </div>

 <div class="sect2" id="migration71.incompatible.e-recoverable">
  <h3 class="title">Fehlermeldung für Fehler der Stufe E_RECOVERABLE</h3>
  <p class="para">
   Die Fehlermeldung für Fehler der Stufe E_RECOVERABLE wurde von &quot;Catchable
   fatal error&quot; auf &quot;Recoverable fatal error&quot; geändert.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.unserialize">
  <h3 class="title">Der Parameter $options der Funktion unserialize()</h3>
  <p class="para">
   Bei der Funktion <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> ist das Element
   <code class="literal">allowed_classes</code> des Parameters $options nun streng
   typisiert, d. h., wenn etwas anderes als ein <span class="type"><a href="language.types.array.php" class="type Array">Array</a></span> oder ein
   <span class="type"><a href="language.types.boolean.php" class="type Bool">Bool</a></span> angegeben wird, gibt unserialize() <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück und
   löst einen Fehler der Stufe <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> aus.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.datetime-microseconds">
  <h3 class="title">Der Konstruktor der Klasse DateTime enthält nun  Mikrosekunden</h3>

  <p class="para">
   Die Klassen <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> und
   <span class="classname"><a href="class.datetimeimmutable.php" class="classname">DateTimeImmutable</a></span> integrieren nun Mikrosekunden in
   korrekter Weise, wenn sie aus der aktuellen Zeit konstruiert werden,
   entweder explizit oder mit einer relativen Zeichenkette (z. B.
   <code class="literal">&quot;first day of next month&quot;</code>). Das bedeutet, dass einfache
   Vergleiche zweier neu erstellter Instanzen nun eher <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurückgeben als
   <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>:
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">() == new </span><span style="color: #0000BB">DateTime</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.fatal-errors-to-error-exceptions">
  <h3 class="title">Umwandlungen fataler Fehler in <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exceptions</h3>

  <p class="para">
   Wenn in der Erweiterung Date die serialisierten Daten für die Klassen
   <span class="classname"><a href="class.datetime.php" class="classname">DateTime</a></span> oder <span class="classname"><a href="class.dateperiod.php" class="classname">DatePeriod</a></span>
   nicht korrekt sind oder bei der Initialisierung der Zeitzone anhand der
   serialisierten Daten ein Fehler auftritt, wird von den Methoden
   <span class="methodname"><strong>__wakeup()</strong></span> oder <span class="methodname"><strong>__set_state()</strong></span>
   nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception ausgelöst, statt einen
   fatalen Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung DBA lösen Funktionen, mit denen Daten geändert werden
   können (z. B. <span class="function"><a href="function.dba-insert.php" class="function">dba_insert()</a></span>) nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen abfangbaren fatalen
   Fehler zu verursachen, wenn der Schlüssel nicht genau zwei Elemente
   enthält.
  </p>

  <p class="para">
   In der Erweiterung DOM lösen ungültige Schema- oder
   RelaxNG-Validierungskontexte nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception
   aus, statt einen fatalen Fehler zu verursachen. Auch der Versuch, eine
   Knotenklasse zu registrieren, die nicht die entsprechende Basisklasse
   erweitert oder der Versuch, eine ungültige Eigenschaft zu lesen oder eine
   schreibgeschützte Eigenschaft zu überschreiben, lösen nun ebenfalls eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus.
  </p>

  <p class="para">
   In der Erweiterung IMAP lösen E-Mail-Adressen, die größer als 16385 Bytes
   sind, nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen
   fatalen Fehler zu verursachen.
  </p>

  <p class="para">
   Wenn in der Erweiterung Intl in einer Klasse, die die Klasse
   <span class="classname"><a href="class.collator.php" class="classname">Collator</a></span> erweitert, der übergeordnete Konstruktor
   nicht aufgerufen wird, bevor die übergeordneten Methoden aufgerufen werden,
   wird nun ein <span class="classname"><a href="class.error.php" class="classname">Error</a></span> ausgelöst, statt einen
   wiederherstellbaren fatalen Fehler zu verursachen. Auch das Klonen eines
   <span class="classname"><a href="class.transliterator.php" class="classname">Transliterator</a></span>-Objekts löst nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, wenn das Klonen des internen
   Transliterators fehlschlägt, statt einen fatalen Fehler zu verursachen.
  </p>

  <p class="para">
   Wenn in der Funktion <span class="function"><strong>ldap_batch_modify()</strong></span> der Erweiterung
   LDAP ein unbekannter Änderungstyp angegeben wird, wird nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception ausgelöst, statt einen fatalen
   Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung mbstring lösen die Funktionen
   <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> und <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> nun eine
   <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>-Exception aus, wenn ein ungültiger
   PHP-Ausdruck angegeben wird und wenn die Option &#039;e&#039; verwendet wird.
  </p>

  <p class="para">
   In der Erweiterung Mcrypt lösen die Funktionen
   <span class="function"><a href="function.mcrypt-encrypt.php" class="function">mcrypt_encrypt()</a></span> und <span class="function"><a href="function.mcrypt-decrypt.php" class="function">mcrypt_decrypt()</a></span>
   nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen fatalen
   Fehler zu verursachen, wenn mcrypt nicht initialisiert werden kann.
  </p>

  <p class="para">
   Wenn in der Erweiterung mysqli versucht wird, eine ungültige Eigenschaft zu
   lesen oder eine schreibgeschützte Eigenschaft zu überschreiben, wird nun
   eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception ausgelöst, statt einen fatalen
   Fehler zu verursachen.
  </p>

  <p class="para">
   Wenn in der Erweiterung Reflection ein Reflection-Objekt oder eine
   Objekteigenschaft nicht abgerufen werden kann, wird nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception ausgelöst, statt einen fatalen
   Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung Session löst ein benutzerdefinierter Session-Handler,
   der keine Zeichenkette für die Session-ID zurückgibt, nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen fatalen Fehler zu
   verursachen, wenn eine Funktion aufgerufen wird, die eine Sesion-ID
   erzeugen muss.
  </p>

  <p class="para">
   In der Erweiterung SimpleXML löst das Erstellen eines unbenannten oder
   doppelten Attributs nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus,
   statt einen fatalen Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung SPL löst der Versuch, ein
   <span class="classname"><strong class="classname">SplDirectory</strong></span>-Objekt zu klonen, nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen fatalen Fehler zu
   verursachen. Auch der Aufruf der Methode
   <span class="methodname"><a href="arrayiterator.append.php" class="methodname">ArrayIterator::append()</a></span> während über ein Objekt
   iteriert wird, löst nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus.
  </p>

  <p class="para">
   In der Standarderweiterung löst die Funktion <span class="function"><a href="function.assert.php" class="function">assert()</a></span>
   nun eine <span class="classname"><a href="class.parseerror.php" class="classname">ParseError</a></span>-Exception aus, statt einen
   abfangbaren fatalen Fehler zu verursachen, wenn ihr als erster Parameter
   eine Zeichenkette mit ungültigem PHP-Code übergeben wird. Auch der Aufruf
   der Funktion <span class="function"><a href="function.forward-static-call.php" class="function">forward_static_call()</a></span> außerhalb eines
   Klassenbereichs löst nun eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus.
  </p>

  <p class="para">
   Wenn in der Erweiterung Tidy versucht wird, einen
   <span class="classname"><a href="class.tidynode.php" class="classname">tidyNode</a></span> manuell zu erstellen, wird nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception ausgelöst, statt einen fatalen
   Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung WDDX löst eine zirkuläre Referenz bei der Serialisierung
   nun eine eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen
   fatalen Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung XML-RPC löst eine zirkuläre Referenz bei der
   Serialisierung nun eine eine <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus,
   statt einen fatalen Fehler zu verursachen.
  </p>

  <p class="para">
   In der Erweiterung Zip löst die Methode
   <span class="methodname"><a href="ziparchive.addglob.php" class="methodname">ZipArchive::addGlob()</a></span> nun eine
   <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exception aus, statt einen fatalen Fehler zu
   verursachen, wenn Glob nicht unterstützt wird.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.lexical-names">
  <h3 class="title">Lexikalisch gebundene Variablen können Namen nicht mehrfach verwenden</h3>

  <p class="para">
   Variablen, die über das <code class="literal">use</code>-Konstrukt an eine
   <a href="functions.anonymous.php" class="link">Closure</a> gebunden sind, können
   weder <var class="varname">$this</var> noch den Namen irgendwelcher
   <a href="language.variables.predefined.php" class="link">superglobals</a> oder Parameter verwenden. Die folgenden
   Funktionsdefinitionen führen zum Beispiel alle zu einem fatalen Fehler:
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function () use (</span><span style="color: #0000BB">$this</span><span style="color: #007700">) {};<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= function (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) use (</span><span style="color: #0000BB">$param</span><span style="color: #007700">) {};</span></span></code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.long2ip">
  <h3 class="title">Änderung des Parametertyps bei long2ip()</h3>
  <p class="para">
   Die Funktion <span class="function"><a href="function.long2ip.php" class="function">long2ip()</a></span> erwartet nun einen Parameter vom
   Typ <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> statt vom Typ <span class="type"><a href="language.types.string.php" class="type string">string</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.json">
  <h3 class="title">JSON-Kodierung und -Dekodierung</h3>
  <p class="para">
   Die INI-Einstellung <code class="parameter">serialize_precision</code> steuert nun
   die Genauigkeit der Serialisierung bei der Kodierung von
   <span class="type"><a href="language.types.float.php" class="type Float">Float</a></span>s (Gleitkommazahlen).
  </p>
  <p class="para">
   Die Dekodierung eines leeren Schlüssels führt nun zu einem leeren
   Eigenschaftsnamen anstelle von <code class="literal">_empty_</code>.

   <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">json_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">json_encode</span><span style="color: #007700">([</span><span style="color: #DD0000">'' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">])));</span></span></code></div>
   </div>

   <p class="para">Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
object(stdClass)#1 (1) {
  [&quot;&quot;]=&gt;
  int(1)
}
</pre></div>
   </div>
  </div>
  </p>
  <p class="para">
   Wenn das Flag <strong><code><a href="json.constants.php#constant.json-unescaped-unicode">JSON_UNESCAPED_UNICODE</a></code></strong> an die Funktion
   <span class="function"><a href="function.json-encode.php" class="function">json_encode()</a></span> übergeben wird, werden nun die Sequenzen
   U+2028 und U+2029 maskiert.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.mbstring">
  <h3 class="title">
   Änderungen der Semantik der Parameter bei <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> und
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span>
  </h3>
  <p class="para">
   Der dritte Parameter der Funktionen <span class="function"><a href="function.mb-ereg.php" class="function">mb_ereg()</a></span> und
   <span class="function"><a href="function.mb-eregi.php" class="function">mb_eregi()</a></span> (<code class="parameter">regs</code>) wird nun auf
   ein leeres Array gesetzt, wenn es keine Übereinstimmung gab. Zuvor wurde
   der Parameter nicht geändert.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.openssl">
  <h3 class="title">Unterstützung für sslv2-Streams entfernt</h3>
  <p class="para">
   Der sslv2-Stream wurde nun aus OpenSSL entfernt.
  </p>
 </div>

 <div class="sect2" id="migration71.incompatible.typed-returns-compile-time">
  <h3 class="title">Verbot von &quot;return;&quot; für typisierte Rückgaben bereits bei der Kompilierung</h3>
  <p class="para">
   In einer Funktion, die einen Rückgabetyp deklariert, löst eine
   return-Anweisung ohne Argument nun einen
   <strong><code><a href="errorfunc.constants.php#constant.e-compile-error">E_COMPILE_ERROR</a></code></strong> aus (außer der Rückgabetyp ist
   als <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> deklariert), auch wenn die return-Anweisung nie
   erreicht wird.
  </p>
 </div>

</div><?php manual_footer($setup); ?>