<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration74.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'migration74.new-features.php',
    1 => 'Neue Features',
    2 => 'Neue Features',
  ),
  'up' => 
  array (
    0 => 'migration74.php',
    1 => 'Migration von PHP 7.3.x auf PHP 7.4.x',
  ),
  'prev' => 
  array (
    0 => 'migration74.php',
    1 => 'Migration von PHP 7.3.x auf PHP 7.4.x',
  ),
  'next' => 
  array (
    0 => 'migration74.new-classes.php',
    1 => 'Neue Klassen und Interfaces',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'appendices/migration74/new-features.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

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

 <div class="sect2" id="migration74.new-features.core">
  <h3 class="title">PHP-Kern</h3>

  <div class="sect3" id="migration74.new-features.core.typed-properties">
   <h4 class="title">Typisierte Eigenschaften</h4>

   <p class="para">
    Klasseneigenschaften unterstützen nun Typ-Deklarationen.
    <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">class </span><span style="color: #0000BB">User </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">int $id</span><span style="color: #007700">;<br />    public </span><span style="color: #0000BB">string $name</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Das obige Beispiel erzwingt, dass <code class="literal">$user-&gt;id</code> nur
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>-Werte zugewiesen werden können und
    <code class="literal">$user-&gt;name</code> nur <span class="type"><a href="language.types.string.php" class="type string">string</a></span>-Werte.
   </p>
  </div>

  <div class="sect3" id="migration74.new-features.core.arrow-functions">
   <h4 class="title">Pfeilfunktionen</h4>

   <p class="para">
    Die <a href="functions.arrow.php" class="link">Pfeilfunktionen</a> bieten eine
    Kurzform der Syntax für die Definition von Funktionen mit impliziter
    Bindung an den Wertebereich.

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$factor </span><span style="color: #007700">= </span><span style="color: #0000BB">10</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$nums </span><span style="color: #007700">= </span><span style="color: #0000BB">array_map</span><span style="color: #007700">(fn(</span><span style="color: #0000BB">$n</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$n </span><span style="color: #007700">* </span><span style="color: #0000BB">$factor</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: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">4</span><span style="color: #007700">]);<br /></span><span style="color: #FF8000">// $nums = array(10, 20, 30, 40);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration74.new-features.core.type-variance">
   <h4 class="title">Eingeschränkte Kovarianz des Rückgabetyps und Kontravarianz des Parametertyps</h4>

   <p class="para">
    Der folgende Code funktioniert nun:
    <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">class </span><span style="color: #0000BB">A </span><span style="color: #007700">{}<br />class </span><span style="color: #0000BB">B </span><span style="color: #007700">extends </span><span style="color: #0000BB">A </span><span style="color: #007700">{}<br /><br />class </span><span style="color: #0000BB">Producer </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">method</span><span style="color: #007700">(): </span><span style="color: #0000BB">A </span><span style="color: #007700">{}<br />}<br />class </span><span style="color: #0000BB">ChildProducer </span><span style="color: #007700">extends </span><span style="color: #0000BB">Producer </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">method</span><span style="color: #007700">(): </span><span style="color: #0000BB">B </span><span style="color: #007700">{}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Die vollständige Unterstützung der Varianz ist nur verfügbar, wenn
    automatisches Laden verwendet wird. Innerhalb einer einzelnen Datei sind
    nur nichtzyklische Typreferenzen möglich, da alle Klassen verfügbar sein
    müssen, bevor sie referenziert werden.
    <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">/**<br /> * Diese Klassen erfüllen die LSP-Anforderungen, da C ein Subtyp von A ist.<br /> * Zum Zeitpunkt der Deklaration der Klasse B ist die Klasse C jedoch noch<br /> * nicht verfügbar. */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">method</span><span style="color: #007700">(): </span><span style="color: #0000BB">A </span><span style="color: #007700">{}<br />}<br /><br />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">// Fatal error: Could not check compatibility between B::method():C and<br />    // A::method(): A, because class С is not available<br />    </span><span style="color: #007700">public function </span><span style="color: #0000BB">method</span><span style="color: #007700">(): </span><span style="color: #0000BB">С </span><span style="color: #007700">{}<br />}<br /><br />class </span><span style="color: #0000BB">C </span><span style="color: #007700">extends </span><span style="color: #0000BB">B </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration74.new-features.core.null-coalescing-assignment-operator">
   <h4 class="title">Zuweisungsoperator für die Kombination mit null (null-Koaleszenz)</h4>

   <p class="para">
    <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">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">] ??= </span><span style="color: #0000BB">computeDefault</span><span style="color: #007700">();<br /></span><span style="color: #FF8000">// entspricht in etwa<br /></span><span style="color: #007700">if (!isset(</span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">])) {<br />    </span><span style="color: #0000BB">$array</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">] = </span><span style="color: #0000BB">computeDefault</span><span style="color: #007700">();<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration74.new-features.core.unpack-inside-array">
   <h4 class="title">Entpacken innerhalb von Arrays</h4>

   <p class="para">
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$parts </span><span style="color: #007700">= [</span><span style="color: #DD0000">'apple'</span><span style="color: #007700">, </span><span style="color: #DD0000">'pear'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">$fruits </span><span style="color: #007700">= [</span><span style="color: #DD0000">'banana'</span><span style="color: #007700">, </span><span style="color: #DD0000">'orange'</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$parts</span><span style="color: #007700">, </span><span style="color: #DD0000">'watermelon'</span><span style="color: #007700">];<br /></span><span style="color: #FF8000">// ['banana', 'orange', 'apple', 'pear', 'watermelon'];<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration74.new-features.core.numeric-literal-separator">
   <h4 class="title">Trennzeichen für numerische Literale</h4>

   <p class="para">
    Bei numerischen Literalen können nun Unterstriche zwischen den Ziffern
    eingefügt werden.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />6.674_083e-11</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gleitkommazahl<br /></span><span style="color: #0000BB">299_792_458</span><span style="color: #007700">;   </span><span style="color: #FF8000">// Dezimalzahl<br /></span><span style="color: #0000BB">0xCAFE_F00D</span><span style="color: #007700">;   </span><span style="color: #FF8000">// Hexadezimalzahl<br /></span><span style="color: #0000BB">0b0101_1111</span><span style="color: #007700">;   </span><span style="color: #FF8000">// Binärzahl<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration74.new-features.core.weakreference">
   <h4 class="title">Schwache Referenzen</h4>

   <p class="para">
    Eine <a href="class.weakreference.php" class="link">schwache Referenz</a>
    ermöglicht es dem Programmierer, eine Referenz auf ein Objekt zu behalten,
    die nicht verhindert, dass das Objekt zerstört wird.
   </p>
  </div>

  <div class="sect3" id="migration74.new-features.core.tostring-exceptions">
   <h4 class="title">Zulassen von Exceptions aus __toString()</h4>

   <p class="para">
    Bei der Methode <a href="language.oop5.magic.php#object.tostring" class="link">__toString()</a> ist es
    nun möglich, Exceptions auszulösen. Zuvor führte dies zu einem
    schwerwiegenden Fehler. Alle behebbaren schwerwiegenden Fehler bei
    Zeichenketten-Konvertierungen wurden in
    <span class="classname"><a href="class.error.php" class="classname">Error</a></span>-Exceptions umgewandelt.
   </p>
  </div>

 </div>

 <div class="sect2" id="migration74.new-features.curl">
  <h3 class="title">CURL</h3>

  <p class="para">
   Wenn die Erweiterung mit libcurl &gt;= 7.56.0 kompiliert wurde, unterstützt
   die Klasse <span class="classname"><a href="class.curlfile.php" class="classname">CURLFile</a></span> nun zusätzlich zu einfachen
   Dateinamen auch Stream-Wrapper.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.filter">
  <h3 class="title">Filter</h3>

  <p class="para">
   Der Filter <strong><code><a href="filter.constants.php#constant.filter-validate-float">FILTER_VALIDATE_FLOAT</a></code></strong> unterstützt nun die
   Optionen <code class="literal">min_range</code> und <code class="literal">max_range</code> mit
   der gleichen Semantik wie <strong><code><a href="filter.constants.php#constant.filter-validate-int">FILTER_VALIDATE_INT</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.ffi">
  <h3 class="title">FFI</h3>

  <p class="para">
   FFI ist eine neue Erweiterung, die eine einfache Möglichkeit bietet, native
   Funktionen aufzurufen, auf native Variablen zuzugreifen und Datenstrukturen
   zu erzeugen/aufzurufen, die in C-Bibliotheken definiert sind.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.gd">
  <h3 class="title">GD</h3>

  <p class="para">
   Der Bildfilter <strong><code><a href="image.constants.php#constant.img-filter-scatter">IMG_FILTER_SCATTER</a></code></strong> wurde hinzugefügt,
   um einen Streufilter auf Bilder anzuwenden.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.hash">
  <h3 class="title">Hash</h3>

  <p class="para">
   Der <code class="literal">crc32c</code>-Hash, der das Castagnoli-Polynom verwendet,
   wurde hinzugefügt. Diese CRC32-Variante wird in Speichersystemen wie iSCSI,
   SCTP, Btrfs und ext4 verwendet.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.mbstring">
  <h3 class="title">Multibyte-Zeichenketten</h3>

  <p class="para">
   Die Funktion <span class="function"><a href="function.mb-str-split.php" class="function">mb_str_split()</a></span> wurde hinzugefügt. Sie
   bietet die gleiche Funktionalität wie <span class="function"><a href="function.str-split.php" class="function">str_split()</a></span>,
   arbeitet aber mit Codepunkten anstelle von Bytes.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.opcache">
  <h3 class="title">OPcache</h3>

  <p class="para">
   Die Unterstützung für das
   <a href="opcache.preloading.php" class="link">Vorladen von Code</a> wurde
   hinzugefügt.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.pcre">
  <h3 class="title">Reguläre Ausdrücke (Perl-kompatibel)</h3>

  <p class="para">
   Die Funktionen <span class="function"><a href="function.preg-replace-callback.php" class="function">preg_replace_callback()</a></span> und
   <span class="function"><a href="function.preg-replace-callback-array.php" class="function">preg_replace_callback_array()</a></span> akzeptieren nun zusätzlich
   den Parameter <code class="parameter">flags</code>, der die Flags
   <strong><code><a href="pcre.constants.php#constant.preg-offset-capture">PREG_OFFSET_CAPTURE</a></code></strong> und
   <strong><code><a href="pcre.constants.php#constant.preg-unmatched-as-null">PREG_UNMATCHED_AS_NULL</a></code></strong> unterstützt. Dies beeinflusst
   das Format des Arrays für die Übereinstimmungen, das an die
   Callback-Funktion übergeben wird.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.pdo">
  <h3 class="title">PDO</h3>

  <p class="para">
   Bei den Treibern für mysql, mssql, dblib, firebird und oci können
   Benutzername und Passwort nun als Teil des PDO DSN angegeben werden. Zuvor
   wurde dies nur vom pgsql-Treiber unterstützt. Wenn ein Benutzername/Passwort
   sowohl im Konstruktor als auch im DSN angegeben wird, hat der Konstruktor
   Vorrang.
  </p>
  <p class="para">
   Es ist nun möglich, Fragezeichen in SQL-Abfragen zu maskieren, damit sie
   nicht als als Platzhalter für Parameter interpretiert werden. Mit
   <code class="literal">??</code> ist es möglich, ein einzelnes Fragezeichen an die
   Datenbank zu senden. Dieses kann z. B. bei PostgreSQL als
   <code class="literal">?</code>-Operator verwendet werden, um zu prüfen, ob ein
   JSON-Schlüssel existiert.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.pdo_oci">
  <h3 class="title">PDO_OCI</h3>

  <p class="para">
   Die Methode <span class="methodname"><a href="pdostatement.getcolumnmeta.php" class="methodname">PDOStatement::getColumnMeta()</a></span> ist nun
   verfügbar.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.pdo_sqlite">
  <h3 class="title">PDO_SQLite</h3>

  <p class="para">
   <code class="literal">PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)</code>
   ermöglicht es, zu prüfen, ob eine Anweisung nur lesend ist, d. h., ob sie
   die Datenbank nicht verändert.
  </p>
  <p class="para">
   <code class="literal">PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true)</code>
   ermöglicht in <span class="function"><a href="pdo.errorinfo.php" class="function">PDO::errorInfo()</a></span> und
   <span class="function"><a href="pdostatement.errorinfo.php" class="function">PDOStatement::errorInfo()</a></span> die Verwendung der erweiterten
   SQLite3-Ergebniscodes.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.sqlite3">
  <h3 class="title">SQLite3</h3>

  <p class="para">
   Die Methode <span class="methodname"><strong>SQLite3::lastExtendedErrorCode()</strong></span> wurde
   hinzugefügt, um den letzten erweiterten Ergebniscode abzurufen.
  </p>
  <p class="para">
   <code class="literal">SQLite3::enableExtendedResultCodes($enable = true)</code> wurde
   hinzugefügt, was dazu führt, dass
   <span class="methodname"><a href="sqlite3.lasterrorcode.php" class="methodname">SQLite3::lastErrorCode()</a></span> erweiterte Ergebniscodes
   zurückgibt.
  </p>
 </div>

 <div class="sect2" id="migration74.new-features.standard">
  <h3 class="title">Standard</h3>

  <div class="sect3" id="migration74.new-features.standard.strip-tags">
   <h4 class="title">strip_tags() mit einem Array von Tag-Namen</h4>
   <p class="para">
    Die Funktion <span class="function"><a href="function.strip-tags.php" class="function">strip_tags()</a></span> akzeptiert nun auch ein Array
    mit erlaubten Tags: Anstelle von
    <code class="literal">strip_tags($str, &#039;&lt;a&gt;&lt;p&gt;&#039;)</code> kann nun
    <code class="literal">strip_tags($str, [&#039;a&#039;, &#039;p&#039;])</code> geschrieben werden.
   </p>
  </div>

  <div class="sect3" id="migration74.new-features.standard.magic-serialize">
   <h4 class="title">Benutzerdefinierte Serialisierung von Objekten</h4>
   <p class="para">
    Es wurde ein neues Verfahren für die benutzerdefinierte Serialisierung von
    Objekten hinzugefügt, das zwei neue magische Methoden verwendet:
    <code class="literal">__serialize</code> und <code class="literal">__unserialize</code>.
    <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: #FF8000">// Gibt ein Array zurück, das alle notwendigen Zustände des Objekts enthält.<br /></span><span style="color: #007700">public function </span><span style="color: #0000BB">__serialize</span><span style="color: #007700">(): array<br />{<br />}<br /><br /></span><span style="color: #FF8000">// Stellt den Objektzustand aus dem angegebenen Datenarray wieder her.<br /></span><span style="color: #007700">public function </span><span style="color: #0000BB">__unserialize</span><span style="color: #007700">(array </span><span style="color: #0000BB">$data</span><span style="color: #007700">): </span><span style="color: #0000BB">void<br /></span><span style="color: #007700">{<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Das neue Serialisierungsverfahren ersetzt die Schnittstelle
    <span class="interfacename"><a href="class.serializable.php" class="interfacename">Serializable</a></span>, die in Zukunft für veraltet
    erklärt werden wird.
   </p>
  </div>

  <div class="sect3" id="migration74.new-features.standard.array-merge-no-args">
   <h4 class="title">Verwendung der array_merge-Funktionen ohne Parameter</h4>
   <p class="para">
    Die Funktionen <span class="function"><a href="function.array-merge.php" class="function">array_merge()</a></span> und
    <span class="function"><a href="function.array-merge-recursive.php" class="function">array_merge_recursive()</a></span> können nun auch ohne Parameter
    aufgerufen werden und geben in diesem Fall ein leeres Array zurück. Dies
    ist nützlich in Verbindung mit dem Spread-Operator (Zerlegungsoperator),
    z. B. <code class="literal">array_merge(...$arrays)</code>.
   </p>
  </div>

  <div class="sect3" id="migration74.new-features.standard.proc-open">
   <h4 class="title">Die Funktion <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span></h4>
   <p class="para">
    <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span> akzeptiert für den Befehl nun ein Array
    anstelle einer Zeichenkette. In diesem Fall wird der Prozess direkt
    geöffnet (ohne den Umweg über eine Shell) und PHP kümmert sich bei Bedarf
    darum, die Parameter zu maskieren.
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />proc_open</span><span style="color: #007700">([</span><span style="color: #DD0000">'php'</span><span style="color: #007700">, </span><span style="color: #DD0000">'-r'</span><span style="color: #007700">, </span><span style="color: #DD0000">'echo "Hello World\n";'</span><span style="color: #007700">], </span><span style="color: #0000BB">$descriptors</span><span style="color: #007700">, </span><span style="color: #0000BB">$pipes</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    <span class="function"><a href="function.proc-open.php" class="function">proc_open()</a></span> unterstützt nun die Deskriptoren
    <code class="literal">redirect</code> und <code class="literal">null</code>.
    <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: #FF8000">// Wie 2&gt;&amp;1 in der Shell<br /></span><span style="color: #0000BB">proc_open</span><span style="color: #007700">(</span><span style="color: #0000BB">$cmd</span><span style="color: #007700">, [</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'pipe'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">], </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'redirect'</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">]], </span><span style="color: #0000BB">$pipes</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// Wie 2&gt;/dev/null oder 2&gt;nul in der Shell<br /></span><span style="color: #0000BB">proc_open</span><span style="color: #007700">(</span><span style="color: #0000BB">$cmd</span><span style="color: #007700">, [</span><span style="color: #0000BB">1 </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'pipe'</span><span style="color: #007700">, </span><span style="color: #DD0000">'w'</span><span style="color: #007700">], </span><span style="color: #0000BB">2 </span><span style="color: #007700">=&gt; [</span><span style="color: #DD0000">'null'</span><span style="color: #007700">]], </span><span style="color: #0000BB">$pipes</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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

  <div class="sect3" id="migration74.new-features.standard.sodium-argon-hash">
   <h4 class="title">argon2i(d) ohne libargon</h4>
   <p class="para">
    Wenn PHP ohne libargon gebaut wird, hat <span class="function"><a href="function.password-hash.php" class="function">password_hash()</a></span>
    nun die argon2i- und argon2id-Implementierungen aus der Erweiterung Sodium.
   </p>
  </div>

 </div>

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