<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration81.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'migration81.other-changes.php',
    1 => 'Other Changes',
    2 => 'Other Changes',
  ),
  'up' => 
  array (
    0 => 'migration81.php',
    1 => 'Migrating from PHP 8.0.x to PHP 8.1.x',
  ),
  'prev' => 
  array (
    0 => 'migration81.deprecated.php',
    1 => 'Deprecated Features',
  ),
  'next' => 
  array (
    0 => 'migration80.php',
    1 => 'Migrating from PHP 7.4.x to PHP 8.0.x',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    'path' => 'appendices/migration81/other-changes.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration81.other-changes" class="sect1">
 <h2 class="title">Other Changes</h2>

 <div class="sect2" id="migration81.other-changes.sapi">
  <h3 class="title">Changes in SAPI Modules</h3>

  <div class="sect3" id="migration81.other-changes.sapi.cli">
   <h4 class="title">CLI</h4>

   <p class="para">
    Using <strong class="option unknown">-a</strong> without the <a href="book.readline.php" class="link">readline extension</a> will now result in an error.
    Previously, <strong class="option unknown">-a</strong> without readline had the same behavior as
    calling <strong class="command">php</strong> without any arguments, apart from printing an additional
    <code class="literal">&quot;Interactive mode enabled&quot;</code> message.
    This mode was <em>not</em> interactive.
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.sapi.phpdbg">
   <h4 class="title">PHPDBG</h4>

   <p class="para">
    Remote functionality from <a href="book.phpdbg.php" class="link">phpdbg</a> has been removed.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration81.other-changes.functions">
  <h3 class="title">Changed Functions</h3>

  <div class="sect3" id="migration81.other-changes.functions.core">
   <h4 class="title">Core</h4>

   <p class="para">
    The order of properties used in <a href="control-structures.foreach.php" class="link">foreach</a>, <span class="function"><a href="function.var-dump.php" class="function">var_dump()</a></span>,
    <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>, object comparison, etc. was changed.
    Properties are now ordered naturally according to their declaration
    and inheritance. Properties declared in a base class are going
    to be before the child properties.
   </p>
   <p class="para">
    This order is consistent with internal layout of properties in
    <code class="code">zend_object</code> structure and repeats the order in
    <code class="code">default_properties_table[]</code> and <code class="code">properties_info_table[]</code>.
    The old order was not documented and was caused by class inheritance implementation details.
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.functions.filter">
   <h4 class="title">Filter</h4>

   <p class="para">
    The <strong><code><a href="filter.constants.php#constant.filter-flag-allow-octal">FILTER_FLAG_ALLOW_OCTAL</a></code></strong> flag of the
    <strong><code><a href="filter.constants.php#constant.filter-validate-int">FILTER_VALIDATE_INT</a></code></strong> filter
    now accept octal string with the leading octal prefix
    (<code class="literal">&quot;0o&quot;</code>/<code class="literal">&quot;0O&quot;</code>).
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.functions.gmp">
   <h4 class="title">GMP</h4>

   <p class="para">
    All <a href="book.gmp.php" class="link">GMP</a> functions now accept octal string with the leading octal prefix
    (<code class="literal">&quot;0o&quot;</code>/<code class="literal">&quot;0O&quot;</code>).
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.functions.pdo-odbc">
   <h4 class="title">PDO ODBC</h4>

   <p class="para">
    <span class="methodname"><a href="pdo.getattribute.php" class="methodname">PDO::getAttribute()</a></span> with
    <strong><code><a href="pdo.constants.php#pdo.constants.attr-server-info">PDO::ATTR_SERVER_INFO</a></code></strong> and
    <strong><code><a href="pdo.constants.php#pdo.constants.attr-server-version">PDO::ATTR_SERVER_VERSION</a></code></strong>
    now return values instead of throwing <span class="classname"><a href="class.pdoexception.php" class="classname">PDOException</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.functions.reflection">
   <h4 class="title">Reflection</h4>

   <p class="para">
    <span class="methodname"><a href="reflectionproperty.setaccessible.php" class="methodname">ReflectionProperty::setAccessible()</a></span> and
    <span class="methodname"><a href="reflectionmethod.setaccessible.php" class="methodname">ReflectionMethod::setAccessible()</a></span>
    no longer have an effect.
    Properties and methods are now always considered accessible via Reflection.
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.functions.standard">
   <h4 class="title">Standard</h4>

   <p class="para">
    <span class="function"><a href="function.syslog.php" class="function">syslog()</a></span> is now binary safe.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration81.other-changes.extensions">
  <h3 class="title">Other Changes to Extensions</h3>

  <div class="sect3" id="migration81.other-changes.extensions.gd">
   <h4 class="title">GD</h4>

   <p class="para">
    <span class="function"><a href="function.imagewebp.php" class="function">imagewebp()</a></span> can now do lossless WebP encoding
    by passing <strong><code><a href="image.constants.php#constant.img-webp-lossless">IMG_WEBP_LOSSLESS</a></code></strong> as the quality.
   </p>
   <p class="para">
    This constant is only defined, if the used libgd supports
    lossless WebP encoding.
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.extensions.mysqli">
   <h4 class="title">MySQLi</h4>

   <p class="para">
    <span class="methodname"><a href="mysqli-stmt.next-result.php" class="methodname">mysqli_stmt::next_result()</a></span> and
    <span class="methodname"><strong>mysqli::fetch_all()</strong></span>
    are now available when linking against libmysqlclient.
   </p>
  </div>

  <div class="sect3" id="migration81.other-changes.extensions.openssl">
   <h4 class="title">OpenSSL</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      The <a href="book.openssl.php" class="link">OpenSSL extension</a> now requires at least OpenSSL version 1.0.2.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      OpenSSL 3.0 is now supported. Be aware that many ciphers are no longer
      enabled by default (part of the legacy provider), and that parameter
      validation (e.g. minimum key sizes) is stricter now.
     </p>
    </li>
   </ul>
  </div>

  <div class="sect3" id="migration81.other-changes.extensions.phar">
   <h4 class="title">Phar</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      SHA256 is now used by default for signatures.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Added support for OpenSSL_SHA256 and OpenSSL_SHA512 signatures.
     </p>
    </li>
   </ul>
  </div>

  <div class="sect3" id="migration81.other-changes.extensions.snmp">
   <h4 class="title">SNMP</h4>

   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Added support for SHA256 and SHA512 for the security protocol.
     </p>
    </li>
   </ul>
  </div>

  <div class="sect3" id="migration81.other-changes.extensions.standard">
   <h4 class="title">Standard</h4>

   <p class="para">
    <code class="code">--with-password-argon2</code> now uses pkg-config to detect libargon2.
    As such, an alternative libargon2 location should now be specified using
    <var class="envar">PKG_CONFIG_PATH</var>.
   </p>
  </div>
 </div>

 <div class="sect2" id="migration81.other-changes.ini">
  <h3 class="title">Changes to INI File Handling</h3>

  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     The <a href="errorfunc.configuration.php#ini.log-errors-max-len" class="link">log_errors_max_len</a>
     INI directive has been removed.
     It no longer had an effect since PHP 8.0.0.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     A leading dollar in a quoted string can now be escaped: <code class="literal">&quot;\${&quot;</code> will now be
     interpreted as a string with contents <code class="literal">${</code>.
    </p>
   </li>
   <li class="listitem">
    <p class="para">
     Backslashes in double quoted strings are now more consistently treated as
     escape characters. Previously, <code class="literal">&quot;foo\\&quot;</code> followed by
     something other than a newline was not considered as a terminated string.
     It is now interpreted as a string with contents <code class="literal">foo\</code>.
     However, as an exception, the string <code class="literal">&quot;foo\&quot;</code>
     followed by a newline will continue to be treated as a valid string with
     contents <code class="literal">foo\</code> rather than an unterminated string.
     This exception exists to support naive uses of Windows file paths such as
     <code class="literal">&quot;C:\foo\&quot;</code>.
    </p>
   </li>
  </ul>
 </div>

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