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

contributors($setup);

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

 <div class="sect2" id="migration82.incompatible.date">
  <h3 class="title">Date</h3>

  <p class="para">
   Die Methode <span class="methodname"><a href="datetime.createfromimmutable.php" class="methodname">DateTime::createFromImmutable()</a></span> hat nun
   den vorläufigen Rückgabetyp <span class="type">static</span>, vorher war es
   <span class="type"><a href="class.datetime.php" class="type DateTime">DateTime</a></span>.
  </p>

  <p class="para">
   Die Methode <span class="methodname"><a href="datetimeimmutable.createfrommutable.php" class="methodname">DateTimeImmutable::createFromMutable()</a></span>
   hat nun den vorläufigen Rückgabetyp <span class="type">static</span>, vorher war es
   <span class="type"><a href="class.datetimeimmutable.php" class="type DateTimeImmutable">DateTimeImmutable</a></span>.
  </p>

  <p class="para">
   In <a href="datetime.formats.php#datetime.formats.relative" class="link">relativen Formaten</a>
   akzeptieren die <code class="literal">number</code>-Symbole keine mehrfachen
   Vorzeichen mehr, z. B. <code class="literal">+-2</code>.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.odbc">
  <h3 class="title">ODBC</h3>

  <p class="para">
   Die Erweiterung ODBC maskiert nun den Benutzernamen und das Passwort für
   den Fall, dass sowohl eine Zeichenkette für die Verbindung als auch
   Benutzername/Passwort übergeben werden und die Zeichenkette angehängt
   werden muss. Zuvor konnten Benutzerwerte, die zu maskierende Werte
   enthielten, eine fehlerhafte Verbindungszeichenkette erzeugen oder Werte
   aus vom Benutzer bereitgestellten Daten injizieren. Die Regeln für die
   Maskierung sollten mit dem Verhalten der .NET BCL DbConnectionOptions
   identisch sein.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.pdo-odbc">
  <h3 class="title">PDO_ODBC</h3>

  <p class="para">
   Wenn eine Zeichenkette für die Verbindung übergeben wird, werden bei der
   Erweiterung PDO_ODBC auch der Benutzername und das Passwort maskiert. Siehe
   <a href="migration82.incompatible.php#migration82.incompatible.odbc" class="link">Änderung an der Erweiterung ODBC</a>
   für weitere Details.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.standard">
  <h3 class="title">Standard</h3>

  <p class="para">
   Die Funktion <span class="function"><a href="function.glob.php" class="function">glob()</a></span> gibt nun ein leeres <a href="language.types.array.php" class="link">Array</a> zurück,
   wenn alle Pfade durch <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a>
   eingeschränkt sind. Zuvor gab sie <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück. Außerdem wird nun eine
   Warnung ausgegeben, auch wenn nur einige Pfade durch
   <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a> eingeschränkt sind.
  </p>

  <p class="para">
   <span class="methodname"><a href="filesystemiterator.construct.php" class="methodname">FilesystemIterator::__construct()</a></span>: Vor PHP 8.2.0 war
   die Konstante <strong><code><a href="class.filesystemiterator.php#filesystemiterator.constants.skip-dots">FilesystemIterator::SKIP_DOTS</a></code></strong> immer
   gesetzt und konnte nicht deaktiviert werden. Um das bisherige Verhalten
   beizubehalten, muss die Konstante explizit gesetzt werden, wenn der
   Parameter <code class="parameter">flags</code> verwendet wird. Der Standardwert des
   Parameters <code class="parameter">flags</code> wurde nicht geändert.
  </p>

  <p class="para">
   Die Funktionen <span class="function"><a href="function.strtolower.php" class="function">strtolower()</a></span>,
   <span class="function"><a href="function.strtoupper.php" class="function">strtoupper()</a></span>,
   <span class="function"><a href="function.stristr.php" class="function">stristr()</a></span>,
   <span class="function"><a href="function.stripos.php" class="function">stripos()</a></span>,
   <span class="function"><a href="function.strripos.php" class="function">strripos()</a></span>,
   <span class="function"><a href="function.lcfirst.php" class="function">lcfirst()</a></span>,
   <span class="function"><a href="function.ucfirst.php" class="function">ucfirst()</a></span>,
   <span class="function"><a href="function.ucwords.php" class="function">ucwords()</a></span> und <span class="function"><a href="function.str-ireplace.php" class="function">str_ireplace()</a></span>
   berücksichtigen die Locale nicht mehr. Sie führen die Umwandlung der Groß-
   und Kleinschreibung nun im ASCII-Format durch, als ob die Locale &quot;C&quot; wäre.
   Lokalisierte Versionen dieser Funktionen stehen in der Erweiterung
   <a href="book.mbstring.php" class="link">MBString</a> zur Verfügung. Darüber hinaus
   verwenden <span class="function"><a href="function.array-change-key-case.php" class="function">array_change_key_case()</a></span> und die Sortierung mit
   <strong><code><a href="array.constants.php#constant.sort-flag-case">SORT_FLAG_CASE</a></code></strong> nun ebenfalls die Umwandlung von Groß-
   und Kleinschreibung im ASCII-Format.
  </p>

  <p class="para">
   Die Funktion <span class="function"><a href="function.str-split.php" class="function">str_split()</a></span> gibt bei einer leeren
   Zeichenkette nun ein leeres <a href="language.types.array.php" class="link">Array</a> zurück. Zuvor gab sie in diesem Fall
   ein Array mit einem einzigen leeren Eintrag für die Zeichenkette zurück.
   Die Funktion <span class="function"><a href="function.mb-str-split.php" class="function">mb_str_split()</a></span> ist von dieser Änderung
   nicht betroffen, weil sie sich schon vorher so verhalten hat.
  </p>

  <p class="para">
   Die Funktionen <span class="function"><a href="function.ksort.php" class="function">ksort()</a></span> und <span class="function"><a href="function.krsort.php" class="function">krsort()</a></span>
   führen Vergleiche von numerischen Zeichenketten nun gemäß
   <strong><code><a href="array.constants.php#constant.sort-regular">SORT_REGULAR</a></code></strong> durch und verwenden dabei die
   Standardregeln von PHP 8.
  </p>

  <p class="para">
   Die Funktion <span class="function"><a href="function.var-export.php" class="function">var_export()</a></span> lässt bei exportierten
   Klassennamen den vorangestellten Backslash nicht mehr weg, d. h. diese sind
   nun voll qualifiziert.
  </p>
 </div>

 <div class="sect2" id="migration82.incompatible.spl">
  <h3 class="title">Standard-PHP-Bibliothek (SPL)</h3>

  <p class="para">
   Die folgenden Methoden erzwingen nun ihre Signatur:
   <ul class="simplelist">
    <li><span class="methodname"><strong>SplFileInfo::_bad_state_ex()</strong></span></li>
    <li><span class="methodname"><a href="splfileobject.getcsvcontrol.php" class="methodname">SplFileObject::getCsvControl()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.fflush.php" class="methodname">SplFileObject::fflush()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.ftell.php" class="methodname">SplFileObject::ftell()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.fgetc.php" class="methodname">SplFileObject::fgetc()</a></span></li>
    <li><span class="methodname"><a href="splfileobject.fpassthru.php" class="methodname">SplFileObject::fpassthru()</a></span></li>
   </ul>
  </p>

  <p class="para">
   Die Methode <span class="methodname"><a href="splfileobject.haschildren.php" class="methodname">SplFileObject::hasChildren()</a></span> hat nun den
   vorläufigen Rückgabetyp <span class="type"><a href="language.types.singleton.php" class="type false">false</a></span>, vorher war es <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
  </p>

  <p class="para">
   Die Methode <span class="methodname"><a href="splfileobject.getchildren.php" class="methodname">SplFileObject::getChildren()</a></span> hat nun den
   vorläufigen Rückgabetyp <span class="type"><a href="language.types.null.php" class="type null">null</a></span>, vorher war es
   <span class="type">?</span><span class="type"><span class="type"><a href="class.recursiveiterator.php" class="type RecursiveIterator">RecursiveIterator</a></span><span class="type"></span></span>.
  </p>

  <p class="para">
   Die Klasse <span class="classname"><a href="class.globiterator.php" class="classname">GlobIterator</a></span> gibt nun ein leeres <a href="language.types.array.php" class="link">Array</a>
   zurück, wenn alle Pfade durch
   <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a> eingeschränkt sind.
   Zuvor gab sie <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück. Außerdem wird nun eine Warnung ausgegeben,
   auch wenn nur einige Pfade durch
   <a href="ini.core.php#ini.open-basedir" class="link">open_basedir</a> eingeschränkt sind.
  </p>
 </div>

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