<?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.new-features.php',
    1 => 'Neue Features',
    2 => 'Neue Features',
  ),
  'up' => 
  array (
    0 => 'migration72.php',
    1 => 'Migration von PHP 7.1.x auf PHP 7.2.x',
  ),
  'prev' => 
  array (
    0 => 'migration72.php',
    1 => 'Migration von PHP 7.1.x auf PHP 7.2.x',
  ),
  'next' => 
  array (
    0 => 'migration72.new-functions.php',
    1 => 'Neue Funktionen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'appendices/migration72/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration72.new-features" class="sect1">
 <h2 class="title">Neue Features</h2>

 <div class="sect2" id="migration72.new-features.object-type">
  <h3 class="title">Neuer Typ: object</h3>

  <p class="para">
   Der neue Typ <span class="type"><a href="language.types.object.php" class="type object">object</a></span> wurde eingeführt. Er kann verwendet
   werden, um (kontravariant) Parameter und (kovariant) Rückgabewerte
   beliebiger Objekte zu typisieren.
  </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: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">object $obj</span><span style="color: #007700">) : </span><span style="color: #0000BB">object<br /></span><span style="color: #007700">{<br />    return new </span><span style="color: #0000BB">SplQueue</span><span style="color: #007700">();<br />}<br /><br /></span><span style="color: #0000BB">test</span><span style="color: #007700">(new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">());</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration72.new-features.ext-loading-by-name">
  <h3 class="title">Erweiterung nach Name laden</h3>

  <p class="para">
   Um Shared- (gemeisam genutzte) Erweiterungen zu laden, wird keine
   Dateierweiterung (<code class="literal">.so</code> unter Unix oder
   <code class="literal">.dll</code> unter Windows) mehr benötigt. Dies gilt sowohl für
   die Datei php.ini als auch für die Funktion <span class="function"><a href="function.dl.php" class="function">dl()</a></span>.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.abstract-method-overriding">
  <h3 class="title">Überschreiben abstrakter Methoden</h3>

  <p class="para">
   Wenn eine abstrakte Klasse eine andere abstrakte Klasse erweitert, ist es
   nun möglich, abstrakte Methoden zu überschreiben.
  </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: #007700">abstract class </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    abstract function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">string $s</span><span style="color: #007700">);<br />}<br />abstract class </span><span style="color: #0000BB">B </span><span style="color: #007700">extends </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// überschrieben - die Kontravarianz für die Parameter und die Kovarianz für die Rückgabe bleiben erhalten<br />    </span><span style="color: #007700">abstract function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$s</span><span style="color: #007700">) : </span><span style="color: #0000BB">int</span><span style="color: #007700">;<br />}</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration72.new-features.sodium">
  <h3 class="title"><a href="book.sodium.php" class="link">Sodium</a> ist nun eine Standarderweiterung</h3>

  <p class="para">
   Die moderne kryptographische Bibliothek Sodium ist nun eine
   Kern-Erweiterung von PHP.
  </p>
  <p class="para">
   Eine vollständige Funktionsreferenz befindet sich im Kapitel
   <a href="book.sodium.php" class="link">Sodium</a>.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.pws-hashing-with-argon2">
  <h3 class="title">Passwort-Hashing mit Argon2</h3>

  <p class="para">
   Die <a href="book.password.php" class="link">Passwort-Hashing-API</a> wurde um
   Argon2 erweitert. Es stehen die folgenden Konstanten zur Verfügung:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="password.constants.php#constant.password-argon2i">PASSWORD_ARGON2I</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="password.constants.php#constant.password-argon2-default-memory-cost">PASSWORD_ARGON2_DEFAULT_MEMORY_COST</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="password.constants.php#constant.password-argon2-default-time-cost">PASSWORD_ARGON2_DEFAULT_TIME_COST</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="password.constants.php#constant.password-argon2-default-threads">PASSWORD_ARGON2_DEFAULT_THREADS</a></code></strong>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration72.new-features.pdo-extended-str-types">
  <h3 class="title">Erweiterte Zeichenketten-Typen für <a href="book.pdo.php" class="link">PDO</a></h3>

  <p class="para">
   Der Zeichenketten-Typ von PDO wurde erweitert, um nationale Zeichensätze
   bei der Emulation vorbereiteter Anweisungen (Prepared Statements) zu
   unterstützen. Dafür wurden folgende Konstanten hinzugefügt:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="pdo.constants.php#pdo.constants.param-str-natl">PDO::PARAM_STR_NATL</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="pdo.constants.php#pdo.constants.param-str-char">PDO::PARAM_STR_CHAR</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="pdo.constants.php#pdo.constants.attr-default-str-param">PDO::ATTR_DEFAULT_STR_PARAM</a></code></strong>
    </span>
   </li>
  </ul>

  <p class="para">
   Diese Konstanten können verwendet werden, indem sie durch bitweises
   <code class="literal">OR</code> mit <strong><code><a href="pdo.constants.php#pdo.constants.param-str">PDO::PARAM_STR</a></code></strong> verkettet
   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 />$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">quote</span><span style="color: #007700">(</span><span style="color: #DD0000">'über'</span><span style="color: #007700">, </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">PARAM_STR </span><span style="color: #007700">| </span><span style="color: #0000BB">PDO</span><span style="color: #007700">::</span><span style="color: #0000BB">PARAM_STR_NATL</span><span style="color: #007700">);</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration72.new-features.additional-emulated-prepares-debugging-info">
  <h3 class="title">Zusätzliche Debugging-Informationen bei der Emulation vorbereiteter Anweisungen in <a href="book.pdo.php" class="link">PDO</a></h3>

  <p class="para">
   Die Methode <span class="function"><a href="pdostatement.debugdumpparams.php" class="function">PDOStatement::debugDumpParams()</a></span> wurde
   aktualisiert, und enthält nun auch die an die DB gesendete SQL-Anweisung,
   wobei die vollständige, unbearbeitete Anweisung (einschließlich der durch
   ihre zugehörigen Werte ersetzten Platzhalter) angezeigt wird. Dies wurde
   hinzugefügt, um die Fehlersuche bei emulierten vorbereiteten Anweisungen zu
   erleichtern (und ist daher nur verfügbar, wenn die Emulation vorbereiteter
   Anweisungen aktiviert ist).
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.extended-ops-in-ldap">
  <h3 class="title">Unterstützung für erweiterte Operationen in <a href="book.ldap.php" class="link">LDAP</a></h3>

  <p class="para">
   Die Erweiterung LDAP wurde um die Unterstützung für EXOP erweitert. Dafür
   wurden folgende Funktionen und Konstanten hinzugefügt:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.ldap-parse-exop.php" class="function">ldap_parse_exop()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.ldap-exop.php" class="function">ldap_exop()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.ldap-exop-passwd.php" class="function">ldap_exop_passwd()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.ldap-exop-whoami.php" class="function">ldap_exop_whoami()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="ldap.constants.php#constant.ldap-exop-start-tls">LDAP_EXOP_START_TLS</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="ldap.constants.php#constant.ldap-exop-modify-passwd">LDAP_EXOP_MODIFY_PASSWD</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="ldap.constants.php#constant.ldap-exop-refresh">LDAP_EXOP_REFRESH</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="ldap.constants.php#constant.ldap-exop-who-am-i">LDAP_EXOP_WHO_AM_I</a></code></strong>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <strong><code><a href="ldap.constants.php#constant.ldap-exop-turn">LDAP_EXOP_TURN</a></code></strong>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration72.new-features.addr-info-in-sockets">
  <h3 class="title">Ergänzung der Erweiterung <a href="book.sockets.php" class="link">Sockets</a> um Adressinformationen</h3>

  <p class="para">
   Die Erweiterung Sockets bietet nun die Möglichkeit, Adressinformationen
   abzurufen, eine Verbindung zu ihnen herzustellen, an sie zu binden und
   Informationen darüber abzurufen. Dafür wurden die folgenden vier Funktionen
   hinzugefügt:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.socket-addrinfo-connect.php" class="function">socket_addrinfo_connect()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.socket-addrinfo-bind.php" class="function">socket_addrinfo_bind()</a></span>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <span class="function"><a href="function.socket-addrinfo-explain.php" class="function">socket_addrinfo_explain()</a></span>
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration72.new-features.param-type-widening">
  <h3 class="title">Erweiterung des Parametertyps</h3>

  <p class="para">
   Die Parametertypen können bei einer überschriebenen Methode und bei der
   Implementierung einer Schnittstelle nun weggelassen werden. Da die
   Parametertypen kontravariant sind, wird das Liskovsche Substitutionsprinzip
   (LSP) dabei nicht verletzt.
  </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: #007700">interface </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">Test</span><span style="color: #007700">(array </span><span style="color: #0000BB">$input</span><span style="color: #007700">);<br />}<br /><br />class </span><span style="color: #0000BB">B </span><span style="color: #007700">implements </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">Test</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">){} </span><span style="color: #FF8000">// Typ für $input weggelassen<br /></span><span style="color: #007700">}</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration72.new-features.trailing-comma-in-grouped-namespaces">
  <h3 class="title">Nachgestelltes Komma bei gruppierten Namensräumen erlaubt</h3>

  <p class="para">
   Die in PHP 7.0 eingeführte Syntax für Gruppen erlaubt nun ein
   abschließendes Komma.
  </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: #007700">use </span><span style="color: #0000BB">Foo\Bar</span><span style="color: #007700">\{<br />    </span><span style="color: #0000BB">Foo</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">Bar</span><span style="color: #007700">,<br />    </span><span style="color: #0000BB">Baz</span><span style="color: #007700">,<br />};</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration72.new-features.proc_nice-windows-support">
  <h3 class="title">Unterstützung für <span class="function"><a href="function.proc-nice.php" class="function">proc_nice()</a></span> unter Windows</h3>

  <p class="para">
   Die Funktion <span class="function"><a href="function.proc-nice.php" class="function">proc_nice()</a></span> wird nun auch unter Windows
   unterstützt.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.pack-unpack-endian-support">
  <h3 class="title">Unterstützung der Byte-Reihenfolge in <span class="function"><a href="function.pack.php" class="function">pack()</a></span> und <span class="function"><a href="function.unpack.php" class="function">unpack()</a></span></h3>

  <p class="para">
   Die Funktionen <span class="function"><a href="function.pack.php" class="function">pack()</a></span> und <span class="function"><a href="function.unpack.php" class="function">unpack()</a></span>
   unterstützen Floats und Doubles nun sowohl im Format Little-Endian als auch
   im Format Big-Endian.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.exif-features">
  <h3 class="title">Verbesserungen bei der Erweiterung <a href="book.exif.php" class="link">EXIF</a></h3>

  <p class="para">
   Die Erweiterung EXIF wurde aktualisiert und unterstützt nun mehr Formate.
   Das bedeutet, dass deren formatspezifische Tags bei der Analyse von Bildern
   mit der Funktion <span class="function"><a href="function.exif-read-data.php" class="function">exif_read_data()</a></span> nun korrekt übersetzt
   werden. Die folgenden neuen Formate werden nun unterstützt:
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Samsung
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     DJI
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Panasonic
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Sony
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Pentax
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Minolta
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Sigma/Foveon
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     AGFA
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Kyocera
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Ricoh
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Epson
    </span>
   </li>
  </ul>

  <p class="para">
   Die EXIF-Funktionen <span class="function"><a href="function.exif-read-data.php" class="function">exif_read_data()</a></span> und
   <span class="function"><a href="function.exif-thumbnail.php" class="function">exif_thumbnail()</a></span> unterstützen nun die Übergabe eines
   Streams als ihren ersten Parameter.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.pcre">
  <h3 class="title">Neue Features in <a href="book.pcre.php" class="link">PCRE</a></h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Der Modifikator <code class="literal">J</code> wurde hnzugefügt, um PCRE_DUPNAMES
     setzen zu können.
    </span>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration72.new-features.sqlite3">
  <h3 class="title"><a href="book.sqlite3.php" class="link">SQLite3</a> ermöglicht das Schreiben von BLOBs</h3>

  <p class="para">
   Mit der Methode <span class="methodname"><a href="sqlite3.openblob.php" class="methodname">SQLite3::openBlob()</a></span> können nun
   BLOB-Felder im schreibenden Modus geöffnet werden. Zuvor wurde nur der
   lesende Modus unterstützt.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.oci8">
  <h3 class="title"><a href="book.oci8.php" class="link">Oracle OCI8</a> Transparent Application Failover Callbacks</h3>

  <p class="para">
   Die Unterstützung für
   <a href="oci8.taf.php" class="link">Oracle Database Transparent Application Failover (TAF) Callbacks</a>
   wurde hinzugefügt. TAF ermöglicht es PHP-OCI8-Anwendungen, die Verbindung
   zu einer vorkonfigurierten Datenbank automatisch wiederherzustellen, wenn
   sie unterbrochen wird. Mit TAF-Callbacks kann die Wiederherstellung der
   Verbindung während des Failovers von der PHP-Anwendung aus überwacht und
   gesteuert werden.
  </p>
 </div>

 <div class="sect2" id="migration72.new-features.zip">
  <h3 class="title">Verbesserungen bei der Erweiterung <a href="book.zip.php" class="link">ZIP</a></h3>

  <p class="para">
   Die Unterstützung für das Lesen und Schreiben verschlüsselter Archive wurde
   hinzugefügt (erfordert libzip 1.2.0).
  </p>
  <p class="para">
   Die Klasse <span class="classname"><a href="class.ziparchive.php" class="classname">ZipArchive</a></span> implementiert nun die
   Schnittstelle <span class="interfacename"><a href="class.countable.php" class="interfacename">Countable</a></span>.
  </p>
  <p class="para">
   Der <code class="literal">zip://</code>-Stream akzeptiert nun die Kontextoption
   <code class="literal">&#039;password&#039;</code>.
  </p>
 </div>

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