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

contributors($setup);

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

 <div class="sect2" id="migration72.incompatible.number_format-no-neg-zero">
  <h3 class="title"><span class="function"><a href="function.number-format.php" class="function">number_format()</a></span> gibt keine negativen Nullen zurück</h3>

  <p class="para">
   In früheren Versionen konnte die Funktion
   <span class="function"><a href="function.number-format.php" class="function">number_format()</a></span> <code class="literal">-0</code> zurückgeben. Dies
   ist zwar für Gleitkommazahlen nach dem Standard IEEE-754 durchaus zulässig,
   aber in Bezug auf die Formatierung der Zahlen in einer für den Menschen
   lesbaren Form war diese Eigenart nicht wünschenswert.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">number_format</span><span style="color: #007700">(-</span><span style="color: #0000BB">0.01</span><span style="color: #007700">)); </span><span style="color: #FF8000">// gibt nun string(1) "0" anstelle von string(2) "-0" aus</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration72.incompatible.object-array-casts">
  <h3 class="title">Behandlung numerischer Schlüssel bei Umwandlungen zwischen Objekten und Arrays</h3>

  <p class="para">
   Numerische Schlüssel werden nun besser behandelt, wenn Arrays in Objekte
   und Objekte in Arrays umgewandelt werden. Dies gilt nicht nur für explizite
   Umwandlungen, sondern auch für die Verwendung von
   <span class="function"><a href="function.settype.php" class="function">settype()</a></span>.
  </p>

  <p class="para">
   Das bedeutet, dass auf die (zeichenkettenartigen) Integer-Schlüssel eines
   Arrays, das in ein Objekt umgewandelt wird, nun zugegriffen werden kann:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// Array zu Objekt<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= [</span><span style="color: #0000BB">0 </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= (object) </span><span style="color: #0000BB">$arr</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$obj</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;{</span><span style="color: #DD0000">'0'</span><span style="color: #007700">}, </span><span style="color: #FF8000">// nun verfügbar<br />    </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">0</span><span style="color: #007700">} </span><span style="color: #FF8000">// nun verfügbar<br /></span><span style="color: #007700">);</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>
object(stdClass)#1 (1) {
  [&quot;0&quot;]=&gt;    // nun ein Zeichenketten-Schlüssel anstelle eines Integer-Schlüssels
  int(1)
}
int(1)
int(1)
</pre></div>
   </div>
  </div>

  <p class="para">
   Genauso kann nun auf die (zeichenkettenartigen) Integer-Schlüssel eines
   Objekts, das in ein Array umgewandelt wird, zugegriffen werden:
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// object to array<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new class {<br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">0</span><span style="color: #007700">} = </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    }<br />};<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= (array) </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">$arr</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">], </span><span style="color: #FF8000">// nun verfügbar<br />    </span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'0'</span><span style="color: #007700">] </span><span style="color: #FF8000">// nun verfügbar<br /></span><span style="color: #007700">);</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>
array(1) {
  [0]=&gt;    // nun ein Integer-Schlüssel anstelle eines Zeichenketten-Schlüssels
  int(1)
}
int(1)
int(1)
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration72.incompatible.no-null-to-get_class">
  <h3 class="title">Keine Übergabe von <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> an <span class="function"><a href="function.get-class.php" class="function">get_class()</a></span></h3>

  <p class="para">
   Bisher wurde bei der Übergabe von <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> an die Funktion
   <span class="function"><a href="function.get-class.php" class="function">get_class()</a></span> der Name der umschließenden Klasse
   ausgegeben. Dieses Verhalten wurde nun entfernt und es wird stattdessen ein
   Fehler der Stufe <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> ausgegeben. Um das
   beschriebene Verhalten wiederherzustellen, sollte der Parameter einfach
   weggelassen werden.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.warn-on-non-countable-types">
  <h3 class="title">Warnung beim Zählen nicht zählbarer Typen</h3>

  <p class="para">
   Wenn versucht wird, nicht zählbare Typen mittels <span class="function"><a href="function.count.php" class="function">count()</a></span>
   zu zählen, wird nun ein Fehler der Stufe <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>
   ausgegeben (dies gilt auch für die Alias-Funktion
   <span class="function"><a href="function.sizeof.php" class="function">sizeof()</a></span>).
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />var_dump</span><span style="color: #007700">(<br />    </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">null</span><span style="color: #007700">), </span><span style="color: #FF8000">// NULL ist nicht zählbar<br />    </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">), </span><span style="color: #FF8000">// Integer sind nicht zählbar<br />    </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #DD0000">'abc'</span><span style="color: #007700">), </span><span style="color: #FF8000">// Zeichenketten sind nicht zählbar<br />    </span><span style="color: #0000BB">count</span><span style="color: #007700">(new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">), </span><span style="color: #FF8000">// Objeke, die die Countable-Schnittstelle nicht implementieren, sind nicht zählbar<br />    </span><span style="color: #0000BB">count</span><span style="color: #007700">([</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">2</span><span style="color: #007700">]) </span><span style="color: #FF8000">// Arrays sind zählbar<br /></span><span style="color: #007700">);</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: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
int(0)
int(1)
int(1)
int(1)
int(2)
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration72.incompatible.hash-ext-to-objects">
  <h3 class="title">ext/hash verwendet Objekte statt Ressourcen</h3>

  <p class="para">
   Als Teil der langfristigen Umstellung weg von Ressourcen wurde die
   Erweiterung <a href="book.hash.php" class="link">Hash</a> dahingehend überarbeitet,
   dass nun Objekte anstelle von Ressourcen verwendet werden. Die Änderung
   sollte für PHP-Entwickler problemlos vonstatten gehen, mit Ausnahme der
   Fälle, in denen Überprüfungen mit der Funktion
   <span class="function"><a href="function.is-resource.php" class="function">is_resource()</a></span> durchgeführt werden (diese müssen auf
   <span class="function"><a href="function.is-object.php" class="function">is_object()</a></span> umgestellt werden).
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.ssl-tls-defaults">
<h3 class="title">Verbesserung der SSL/TLS-Standardeinstellungen</h3>

  <p class="para">
   Folgendes wurde an den Standardeinstellungen geändert:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="literal">tls://</code> ist nun standardmäßig auf TLSv1.0 oder TLSv1.1
     oder TLSv1.2 eingestellt
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">ssl://</code> ist nun ein Alias für <code class="literal">tls://</code>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Die <code class="literal">STREAM_CRYPTO_METHOD_TLS_*</code>-Konstanten sind nun
     standardmäßig auf TLSv1.0 oder TLSv1.1 + TLSv1.2 eingestellt, statt nur
     auf TLSv1.0
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration72.incompatible.gettype-on-closed-resource">
  <h3 class="title">Rückgabewert von <span class="function"><a href="function.gettype.php" class="function">gettype()</a></span> bei geschlossenen Ressourcen</h3>

  <p class="para">
   Bisher gab <span class="function"><a href="function.gettype.php" class="function">gettype()</a></span> bei einer geschlossenen Ressource
   die Zeichenkette <code class="literal">&quot;unknown type&quot;</code> zurück. Nun wird die
   Zeichenkette <code class="literal">&quot;resource (closed)&quot;</code> zurückgegeben.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.is_object-on-incomplete_class">
  <h3 class="title"><span class="function"><a href="function.is-object.php" class="function">is_object()</a></span> und <span class="classname"><a href="class.php-incomplete-class.php" class="classname">__PHP_Incomplete_Class</a></span></h3>

  <p class="para">
   Bisher gab die Funktion <span class="function"><a href="function.is-object.php" class="function">is_object()</a></span> bei der Klasse
   <span class="classname"><a href="class.php-incomplete-class.php" class="classname">__PHP_Incomplete_Class</a></span> <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück. Nun gibt sie
   <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.undefined-constants">
  <h3 class="title">Erhöhung der Fehlerstufe bei undefinierten Konstanten</h3>

  <p class="para">
   Unvollständig definierte Referenzen auf undefinierte Konstanten erzeugen
   nun einen Fehler der Stufe <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> (statt
   <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong>). In der nächsten Hauptversion von PHP werden
   sie <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exceptions auslösen.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.windows-support">
  <h3 class="title">Windows-Unterstützung</h3>

  <p class="para">
   Die derzeit niedrigsten offiziell unterstützten Windows-Version sind
   Windows 7/Server 2008 R2.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.trait-properties">
  <h3 class="title">Überprüfung der Standard-Eigenschaftswerte von Traits</h3>

  <p class="para">
   Bei Kompatibilitätsprüfungen von Standard-Eigenschaftswerten von Traits
   werden nun keine Typumwandlungen mehr durchgeführt.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.object-reserved-word">
  <h3 class="title"><code class="literal">object</code> als Klassenname</h3>

  <p class="para">
   Die Bezeichnung <code class="literal">object</code> war in PHP 7.0 bisher weich
   reserviert. Nun ist sie hart reserviert, d. h., sie kann nicht mehr als
   Name für Klassen, Traits oder Schnittstellen verwendet werden.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.netware-support">
  <h3 class="title">NetWare-Unterstützung</h3>

  <p class="para">
   Die Unterstützung für NetWare wurde entfernt.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.array-unique">
  <h3 class="title"><span class="function"><a href="function.array-unique.php" class="function">array_unique()</a></span> mit <strong><code><a href="array.constants.php#constant.sort-string">SORT_STRING</a></code></strong></h3>

  <p class="para">
   Während <span class="function"><a href="function.array-unique.php" class="function">array_unique()</a></span> mit
   <strong><code><a href="array.constants.php#constant.sort-string">SORT_STRING</a></code></strong> früher das Array kopiert und nicht
   eindeutige Elemente entfernt hat (ohne das Array anschließend zu packen),
   wird nun ein neues Array erstellt, das aus den eindeutigen Elementen
   besteht. Dies kann zu unterschiedlichen numerischen Indizes führen.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.bcmod-and-floats">
  <h3 class="title">Änderungen an <span class="function"><a href="function.bcmod.php" class="function">bcmod()</a></span> bei Gleitkommazahlen</h3>

  <p class="para">
   Die Funktion <span class="function"><a href="function.bcmod.php" class="function">bcmod()</a></span> reduziert Gleitkommazahlen nicht
   mehr auf Ganzzahlen. Daher entspricht ihr Verhalten nun der Funktion
   <span class="function"><a href="function.fmod.php" class="function">fmod()</a></span> und nicht mehr dem Operator <code class="literal">%</code>.
   Zum Beispiel liefert <code class="literal">bcmod(&#039;4&#039;, &#039;3.5&#039;)</code> nun
   <code class="literal">0.5</code> anstelle von <code class="literal">1</code>.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.hash-functions">
  <h3 class="title">Hashing-Funktionen und nicht-kryptographische Hashes</h3>

  <p class="para">
   Die Funktionen <span class="function"><a href="function.hash-hmac.php" class="function">hash_hmac()</a></span>,
   <span class="function"><a href="function.hash-hmac-file.php" class="function">hash_hmac_file()</a></span>, <span class="function"><a href="function.hash-pbkdf2.php" class="function">hash_pbkdf2()</a></span> und
   <span class="function"><a href="function.hash-init.php" class="function">hash_init()</a></span> (mit <strong><code><a href="hash.constants.php#constant.hash-hmac">HASH_HMAC</a></code></strong>)
   akzeptieren keine nicht-kryptographischen Hashes mehr.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.json_decode-changes">
  <h3 class="title">Funktionsoptionen für <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span></h3>

  <p class="para">
   Wenn bei der Funktion <span class="function"><a href="function.json-decode.php" class="function">json_decode()</a></span> der zweite Parameter
   (assoc) <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> ist, wird nun die Funktionsoption
   <strong><code><a href="json.constants.php#constant.json-object-as-array">JSON_OBJECT_AS_ARRAY</a></code></strong> verwendet. Zuvor wurde
   <strong><code><a href="json.constants.php#constant.json-object-as-array">JSON_OBJECT_AS_ARRAY</a></code></strong> immer ignoriert.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.rand-mt_rand-output">
  <h3 class="title">Die Rückgabewerte von <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></h3>

  <p class="para">
   Die Sequenzen, die von den Funktionen <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> für einen bestimmten Seed erzeugt werden,
   können sich auf 64-Bit-Systemen von den in PHP 7.1 erzeugten unterscheiden
   (aufgrund eines behobenen Modulo-Bias-Fehlers in der Implementierung).
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.sqlsafe_mode-ini-setting">
  <h3 class="title">INI-Einstellung <a href="ini.core.php#ini.sql.safe-mode" class="link"><code class="parameter">sql.safe_mode</code></a> entfernt</h3>

  <p class="para">
   Die INI-Einstellung <code class="parameter">sql.safe_mode</code> wurde entfernt.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.date_parse_from_format">
  <h3 class="title">Änderungen an <span class="function"><a href="function.date-parse.php" class="function">date_parse()</a></span> und <span class="function"><a href="function.date-parse-from-format.php" class="function">date_parse_from_format()</a></span></h3>

  <p class="para">
   Das Element <code class="literal">zone</code> des Arrays, das von den Funktionen
   <span class="function"><a href="function.date-parse.php" class="function">date_parse()</a></span> und
   <span class="function"><a href="function.date-parse-from-format.php" class="function">date_parse_from_format()</a></span> zurückgegeben wird, zeigt nun
   Sekunden anstelle von Minuten, und sein Vorzeichen wurde umgedreht. So wird
   zum Beispiel <code class="literal">-120</code> nun zu <code class="literal">7200</code>.
  </p>
 </div>

 <div class="sect2" id="migration72.incompatible.cookie-decode">
  <h3 class="title">Eingehende Cookies</h3>

  <p class="para">
   Seit PHP 7.2.34 werden die <em>Namen</em> eingehender Cookies
   aus Sicherheitsgründen nicht mehr URL-dekodiert.
  </p>
 </div>

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