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

contributors($setup);

?>
<div id="migration80.deprecated" class="sect1">
 <h2 class="title">Veraltete Features</h2>

 <div class="sect2" id="migration80.deprecated.core">
  <h3 class="title">PHP-Kern</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Wenn nach einem Parameter mit einem Standardwert ein benötigter folgt,
     hat der Standardwert keinen Effekt. Mit PHP 8.0.0 ist das veraltet und
     kann durch das Entfernen des Standardwertes behoben werden, ohne dass
     Funktionalität verloren geht:
    </p>
    <p class="para">
     <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">$a </span><span style="color: #007700">= [], </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {} </span><span style="color: #FF8000">// Vorher<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}      </span><span style="color: #FF8000">// Danach<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </p>
    <p class="para">
     Eine Ausnahme der Regel stellen Parameter dar, welche der Form
     <code class="code">Typ $param = null</code> entsprechen, bei welcher die Vorgabe null
     den Typ implizit nullbar macht. Diese Funktionalität bleibt erhalten, es
     wird jedoch empfohlen, den Typ explizit nullbar zu machen:
    </p>
    <p class="para">
     <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">A $a </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {} </span><span style="color: #FF8000">// Noch erlaubt<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(?</span><span style="color: #0000BB">A $a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) {}       </span><span style="color: #FF8000">// Empfohlen<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Das Aufrufen von <span class="function"><a href="function.get-defined-functions.php" class="function">get_defined_functions()</a></span> mit
     <code class="parameter">exclude_disabled</code> explizit auf <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> gesetzt, ist
     veraltet und hat keine Wirkung mehr.
     <span class="function"><a href="function.get-defined-functions.php" class="function">get_defined_functions()</a></span> erlaubt keine deaktivierten
     Funktionen mehr.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.deprecated.enchant">
  <h3 class="title">Enchant</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-set-dict-path.php" class="function">enchant_broker_set_dict_path()</a></span> und
     <span class="function"><a href="function.enchant-broker-get-dict-path.php" class="function">enchant_broker_get_dict_path()</a></span> sind veraltet, da diese
     Funktionalität in libenchant &lt; 1.5 und libenchant-2 nicht mehr
     vorhanden ist.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-dict-add-to-personal.php" class="function">enchant_dict_add_to_personal()</a></span> ist veraltet.
     <span class="function"><a href="function.enchant-dict-add.php" class="function">enchant_dict_add()</a></span> ersetzt diese Funktion.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-dict-is-in-session.php" class="function">enchant_dict_is_in_session()</a></span> ist veraltet.
     <span class="function"><a href="function.enchant-dict-is-added.php" class="function">enchant_dict_is_added()</a></span> ersetzt diese Funktion.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="function"><a href="function.enchant-broker-free.php" class="function">enchant_broker_free()</a></span> und
     <span class="function"><a href="function.enchant-broker-free-dict.php" class="function">enchant_broker_free_dict()</a></span> sind ebenfalls veraltet.
     Das Objekt kann stattdessen mit <span class="function"><a href="function.unset.php" class="function">unset()</a></span> gelöscht
     werden.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Die Konstanten <strong><code><a href="enchant.constants.php#constant.enchant-myspell">ENCHANT_MYSPELL</a></code></strong> und
     <strong><code><a href="enchant.constants.php#constant.enchant-ispell">ENCHANT_ISPELL</a></code></strong>  sind veraltet.
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.deprecated.libxml">
  <h3 class="title">LibXML</h3>

  <p class="para">
   <span class="function"><a href="function.libxml-disable-entity-loader.php" class="function">libxml_disable_entity_loader()</a></span> ist veraltet. Da nun
   jedoch libxml 2.9.0 vorausgesetzt wird, ist das externe Laden von Entitäten
   garantiert standardmäßig deaktiviert, und diese Funktion wird nicht mehr
   benötigt, um vor XXE-Angriffen zu schützen, es sei denn, das (immer noch
   angreifbare) <strong><code><a href="libxml.constants.php#constant.libxml-noent">LIBXML_NOENT</a></code></strong> wird verwendet. In diesem
   Fall ist es empfehlenswert, den Code unter Verwendung von
   <span class="function"><a href="function.libxml-set-external-entity-loader.php" class="function">libxml_set_external_entity_loader()</a></span> zu überarbeiten, um
   das Laden externer Entitäten zu unterdrücken.
  </p>
 </div>

 <div class="sect2" id="migration80.deprecated.pgsql">
  <h3 class="title">PGSQL / PDO PGSQL</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Die Konstante <strong><code><a href="pgsql.constants.php#constant.pgsql-libpq-version-str">PGSQL_LIBPQ_VERSION_STR</a></code></strong> nimmt nun den
     selben Wert an wie <strong><code><a href="pgsql.constants.php#constant.pgsql-libpq-version">PGSQL_LIBPQ_VERSION</a></code></strong> und ist daher
     veraltet.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Die Funktions-Aliase in der pgsql-Erweiterung sind veraltet. Die folgende
     Liste zeigt, welche Funktionen stattdessen verwendet werden sollen.
    </p>
    <p class="para">
     <ul class="simplelist">
      <li><span class="function"><strong>pg_errormessage()</strong></span> → <span class="function"><a href="function.pg-last-error.php" class="function">pg_last_error()</a></span></li>
      <li><span class="function"><strong>pg_numrows()</strong></span> → <span class="function"><a href="function.pg-num-rows.php" class="function">pg_num_rows()</a></span></li>
      <li><span class="function"><strong>pg_numfields()</strong></span> → <span class="function"><a href="function.pg-num-fields.php" class="function">pg_num_fields()</a></span></li>
      <li><span class="function"><strong>pg_cmdtuples()</strong></span> → <span class="function"><a href="function.pg-affected-rows.php" class="function">pg_affected_rows()</a></span></li>
      <li><span class="function"><strong>pg_fieldname()</strong></span> → <span class="function"><a href="function.pg-field-name.php" class="function">pg_field_name()</a></span></li>
      <li><span class="function"><strong>pg_fieldsize()</strong></span> → <span class="function"><a href="function.pg-field-size.php" class="function">pg_field_size()</a></span></li>
      <li><span class="function"><strong>pg_fieldtype()</strong></span> → <span class="function"><a href="function.pg-field-type.php" class="function">pg_field_type()</a></span></li>
      <li><span class="function"><strong>pg_fieldnum()</strong></span> → <span class="function"><a href="function.pg-field-num.php" class="function">pg_field_num()</a></span></li>
      <li><span class="function"><strong>pg_result()</strong></span> → <span class="function"><a href="function.pg-fetch-result.php" class="function">pg_fetch_result()</a></span></li>
      <li><span class="function"><strong>pg_fieldprtlen()</strong></span> → <span class="function"><a href="function.pg-field-prtlen.php" class="function">pg_field_prtlen()</a></span></li>
      <li><span class="function"><strong>pg_fieldisnull()</strong></span> → <span class="function"><a href="function.pg-field-is-null.php" class="function">pg_field_is_null()</a></span></li>
      <li><span class="function"><strong>pg_freeresult()</strong></span> → <span class="function"><a href="function.pg-free-result.php" class="function">pg_free_result()</a></span></li>
      <li><span class="function"><strong>pg_getlastoid()</strong></span> → <span class="function"><a href="function.pg-last-oid.php" class="function">pg_last_oid()</a></span></li>
      <li><span class="function"><strong>pg_locreate()</strong></span> → <span class="function"><a href="function.pg-lo-create.php" class="function">pg_lo_create()</a></span></li>
      <li><span class="function"><strong>pg_lounlink()</strong></span> → <span class="function"><a href="function.pg-lo-unlink.php" class="function">pg_lo_unlink()</a></span></li>
      <li><span class="function"><strong>pg_loopen()</strong></span> → <span class="function"><a href="function.pg-lo-open.php" class="function">pg_lo_open()</a></span></li>
      <li><span class="function"><strong>pg_loclose()</strong></span> → <span class="function"><a href="function.pg-lo-close.php" class="function">pg_lo_close()</a></span></li>
      <li><span class="function"><strong>pg_loread()</strong></span> → <span class="function"><a href="function.pg-lo-read.php" class="function">pg_lo_read()</a></span></li>
      <li><span class="function"><strong>pg_lowrite()</strong></span> → <span class="function"><a href="function.pg-lo-write.php" class="function">pg_lo_write()</a></span></li>
      <li><span class="function"><strong>pg_loreadall()</strong></span> → <span class="function"><a href="function.pg-lo-read-all.php" class="function">pg_lo_read_all()</a></span></li>
      <li><span class="function"><strong>pg_loimport()</strong></span> → <span class="function"><a href="function.pg-lo-import.php" class="function">pg_lo_import()</a></span></li>
      <li><span class="function"><strong>pg_loexport()</strong></span> → <span class="function"><a href="function.pg-lo-export.php" class="function">pg_lo_export()</a></span></li>
      <li><span class="function"><strong>pg_setclientencoding()</strong></span> → <span class="function"><a href="function.pg-set-client-encoding.php" class="function">pg_set_client_encoding()</a></span></li>
      <li><span class="function"><strong>pg_clientencoding()</strong></span> -> <span class="function"><a href="function.pg-client-encoding.php" class="function">pg_client_encoding()</a></span></li>
     </ul>
    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.deprecated.standard">
  <h3 class="title">Standard Library</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Sortierend vergleichende Funktionen welche <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> oder <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>
     zurückgeben, werden nun eine deprecation-Warnung zurückgeben und sollten
     durch eine Implementation ersetzt werden, welche einen Integer
     zurückgibt, der kleiner, gleich oder größer als 0 ist.
    </p>
    <p class="para">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Replace<br /></span><span style="color: #0000BB">usort</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">, fn(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$a </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// With<br /></span><span style="color: #0000BB">usort</span><span style="color: #007700">(</span><span style="color: #0000BB">$array</span><span style="color: #007700">, fn(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">) =&gt; </span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.deprecated.zip">
  <h3 class="title">Zip</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Die Verwendung einer leeren Datei als ZipArchive ist veraltet. Libzip
     1.6.0 akzeptiert keine leeren Dateien als ZIP-Archive mehr. Der
     existierende Workaround wird in der nächsten Version entfernt.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Die prozedurale API von Zip ist veraltet. Als Ersatz kann
     <span class="classname"><a href="class.ziparchive.php" class="classname">ZipArchive</a></span> genutzt werden. Die Iteration über alle
     Entitäten kann durch den Einsatz von
     <span class="methodname"><a href="ziparchive.statindex.php" class="methodname">ZipArchive::statIndex()</a></span> und einer
     <a href="control-structures.for.php" class="link">for</a>-Schleife erreicht
     werden:
    </p>
    <p class="para">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Iteration mit der prozedualen API<br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">is_resource</span><span style="color: #007700">(</span><span style="color: #0000BB">$zip</span><span style="color: #007700">));<br />while (</span><span style="color: #0000BB">$entry </span><span style="color: #007700">= </span><span style="color: #0000BB">zip_read</span><span style="color: #007700">(</span><span style="color: #0000BB">$zip</span><span style="color: #007700">)) {<br />    echo </span><span style="color: #0000BB">zip_entry_name</span><span style="color: #007700">(</span><span style="color: #0000BB">$entry</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #FF8000">// Iteration mit der Objekorientierten API<br /></span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">$zip </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">ZipArchive</span><span style="color: #007700">);<br />for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$entry </span><span style="color: #007700">= </span><span style="color: #0000BB">$zip</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">statIndex</span><span style="color: #007700">(</span><span style="color: #0000BB">$i</span><span style="color: #007700">); </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {<br />    echo </span><span style="color: #0000BB">$entry</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </p>
   </li>
  </ul>
 </div>

 <div class="sect2" id="migration80.deprecated.reflection">
  <h3 class="title">Reflection</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="reflectionfunction.isdisabled.php" class="methodname">ReflectionFunction::isDisabled()</a></span> ist veraltet, da
     es nicht mehr möglich ist, eine <span class="classname"><a href="class.reflectionfunction.php" class="classname">ReflectionFunction</a></span>
     für eine deaktivierte Funktion zu erstellen. Die Methode gibt nun immer
     <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     <span class="methodname"><a href="reflectionparameter.getclass.php" class="methodname">ReflectionParameter::getClass()</a></span>,
     <span class="methodname"><a href="reflectionparameter.isarray.php" class="methodname">ReflectionParameter::isArray()</a></span>, und
     <span class="methodname"><a href="reflectionparameter.iscallable.php" class="methodname">ReflectionParameter::isCallable()</a></span> sind veraltet.
     <span class="methodname"><a href="reflectionparameter.gettype.php" class="methodname">ReflectionParameter::getType()</a></span> und die
     <span class="classname"><a href="class.reflectiontype.php" class="classname">ReflectionType</a></span>-APIs sollten stattdessen genutzt werden.
    </p>
   </li>
  </ul>
 </div>

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