<?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 => 'ru',
  ),
  'this' => 
  array (
    0 => 'migration74.deprecated.php',
    1 => 'Устаревшая функциональность',
    2 => 'Устаревшая функциональность',
  ),
  'up' => 
  array (
    0 => 'migration74.php',
    1 => 'Миграция с PHP 7.3.x на PHP 7.4.x',
  ),
  'prev' => 
  array (
    0 => 'migration74.incompatible.php',
    1 => 'Изменения, которые ломают обратную совместимость',
  ),
  'next' => 
  array (
    0 => 'migration74.removed-extensions.php',
    1 => 'Удалённые модули',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'appendices/migration74/deprecated.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration74.deprecated" class="sect1">
 <h2 class="title">Устаревшая функциональность</h2>

 <div class="sect2" id="migration74.deprecated.core">
  <h3 class="title">Ядро PHP</h3>

  <div class="sect3" id="migration74.deprecated.core.nested-ternary">
   <h4 class="title">Вложенные тернарные операторы без явного указания скобок</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 />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">: </span><span style="color: #0000BB">5</span><span style="color: #007700">;   </span><span style="color: #FF8000">// устарело<br /></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">: </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// хорошо<br /></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">: </span><span style="color: #0000BB">5</span><span style="color: #007700">); </span><span style="color: #FF8000">// хорошо<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Скобки <em>не</em> требуются при вложении в средний операнд,
    поскольку это всегда однозначно и не зависит от ассоциативности:
    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">1 ? 2 ? 3 : 4 : 5 // хорошо</span></code></div>
     </div>

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

  <div class="sect3" id="migration74.deprecated.core.array-string-access-curly-brace">
   <h4 class="title">Обращение к индексу массива и строки через фигурные скобки</h4>

   <p class="para">
    Синтаксис доступа к массиву и строке с использованием фигурных скобок объявлен устаревшим.
    Используйте <code class="literal">$var[$idx]</code> вместо <code class="literal">$var{$idx}</code>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.real">
   <h4 class="title">Приведение типа (real) и функция <span class="function"><a href="function.is-real.php" class="function">is_real()</a></span></h4>

   <p class="para">
    Приведение типа <code class="literal">(real)</code> объявлено устаревшим,
    вместо этого используйте <code class="literal">(float)</code>.
   </p>
   <p class="para">
    Функция <span class="function"><a href="function.is-real.php" class="function">is_real()</a></span> также объявлена устаревшей,
    вместо неё используйте <span class="function"><a href="function.is-float.php" class="function">is_float()</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.unbind-this">
   <h4 class="title">Отмена привязки <code class="literal">$this</code> при использовании <code class="literal">$this</code></h4>

   <p class="para">
    Отмена привязки <code class="literal">$this</code> в нестатическом замыкании,
    которое использует <code class="literal">$this</code>, объявлена устаревшей.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.parent">
   <h4 class="title">Ключевое слово <code class="literal">parent</code> вне родительского класса</h4>

   <p class="para">
    Использование <code class="literal">parent</code> внутри класса, у которого нет родителя, объявлено устаревшим,
    а в будущем произойдёт ошибка компиляции. А пока ошибка будет только при обращении к родителю во время выполнения.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.allow-url-include">
   <h4 class="title">INI-опция allow_url_include</h4>

   <p class="para">
    Конфигурационная директива <a href="filesystem.configuration.php#ini.allow-url-include" class="link">allow_url_include</a>
    объявлена устаревшей. При включённой опции будет вызвано уведомление об устаревшей возможности во время загрузки.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.invalid-base-characters">
   <h4 class="title">Недопустимые символы в основных функциях преобразования</h4>

   <p class="para">
    Передача недопустимых символов в <span class="function"><a href="function.base-convert.php" class="function">base_convert()</a></span>,
    <span class="function"><a href="function.bindec.php" class="function">bindec()</a></span>, <span class="function"><a href="function.octdec.php" class="function">octdec()</a></span> теперь вызывает уведомление об устаревшей возможности.
    Результат всё равно будет вычислен так, как если бы недопустимых символов не было.
    Ведущие и завершающие пробелы, а также префиксы типа 0x (в зависимости от системы счисления) по-прежнему разрешены.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.array-key-exists-objects">
   <h4 class="title">Использование <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span> с объектом</h4>

   <p class="para">
    Использование <span class="function"><a href="function.array-key-exists.php" class="function">array_key_exists()</a></span> с объектом объявлено устаревшим.
    Вместо этого следует использовать либо <span class="function"><a href="function.isset.php" class="function">isset()</a></span>, либо <span class="function"><a href="function.property-exists.php" class="function">property_exists()</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.magic-quotes-functions">
   <h4 class="title">Функции, связанные с волшебными кавычками</h4>

   <p class="para">
    Функции <span class="function"><a href="function.get-magic-quotes-gpc.php" class="function">get_magic_quotes_gpc()</a></span> и <span class="function"><a href="function.get-magic-quotes-runtime.php" class="function">get_magic_quotes_runtime()</a></span> объявлены устаревшими.
    Они всегда возвращают <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.hebrevc">
   <h4 class="title">Функция <span class="function"><a href="function.hebrevc.php" class="function">hebrevc()</a></span></h4>

   <p class="para">
    Функция <span class="function"><a href="function.hebrevc.php" class="function">hebrevc()</a></span> объявлена устаревшей.
    Её можно заменить на выражение <code class="literal">nl2br(hebrev($str))</code>,
    либо лучше всего использовать поддержку Unicode RTL.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.convert-cyr-string">
   <h4 class="title">Функция <span class="function"><a href="function.convert-cyr-string.php" class="function">convert_cyr_string()</a></span></h4>

   <p class="para">
    Функция <span class="function"><a href="function.convert-cyr-string.php" class="function">convert_cyr_string()</a></span> объявлена устаревшей.
    Её можно заменить либо на <span class="function"><strong>mb_convert_string()</strong></span>, либо
    <span class="function"><a href="function.iconv.php" class="function">iconv()</a></span> или на класс <span class="classname"><a href="class.uconverter.php" class="classname">UConverter</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.money-format">
   <h4 class="title">Функция <span class="function"><a href="function.money-format.php" class="function">money_format()</a></span></h4>

   <p class="para">
    Функция <span class="function"><a href="function.money-format.php" class="function">money_format()</a></span> объявлена устаревшей.
    Она может быть заменена функциональностью интернационализации - классом <span class="classname"><a href="class.numberformatter.php" class="classname">NumberFormatter</a></span>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.ezmlm-hash">
   <h4 class="title">Функция <span class="function"><a href="function.ezmlm-hash.php" class="function">ezmlm_hash()</a></span></h4>

   <p class="para">
    Функция <span class="function"><a href="function.ezmlm-hash.php" class="function">ezmlm_hash()</a></span> объявлена устаревшей.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.restore-include-path">
   <h4 class="title">Функция <span class="function"><a href="function.restore-include-path.php" class="function">restore_include_path()</a></span></h4>

   <p class="para">
    Функция <span class="function"><a href="function.restore-include-path.php" class="function">restore_include_path()</a></span> объявлена устаревшей.
    Её можно заменить на <code class="literal">ini_restore(&#039;include_path&#039;)</code>.
   </p>
  </div>

  <div class="sect3" id="migration74.deprecated.core.implode-reverse-parameters">
   <h4 class="title">Использование implode с нерекомендуемым порядком параметров</h4>

   <p class="para">
    Передача параметров в <span class="function"><a href="function.implode.php" class="function">implode()</a></span> в обратном порядке объявлена устаревшей -
    используйте <code class="literal">implode($glue, $parts)</code> вместо <code class="literal">implode($parts, $glue)</code>.
   </p>
  </div>

 </div>

 <div class="sect2" id="migration74.deprecated.com">
  <h3 class="title">COM</h3>

  <p class="para">
   Импорт библиотек типов с регистрацией констант без учёта регистра объявлен устаревшим.
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.filter">
  <h3 class="title">Фильтрация</h3>

  <p class="para">
   Фильтр <strong><code><a href="filter.constants.php#constant.filter-sanitize-magic-quotes">FILTER_SANITIZE_MAGIC_QUOTES</a></code></strong> объявлен устаревшим,
   вместо него используйте <strong><code><a href="filter.constants.php#constant.filter-sanitize-add-slashes">FILTER_SANITIZE_ADD_SLASHES</a></code></strong>.
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.mbstring">
  <h3 class="title">Многобайтовые строки</h3>

  <p class="para">
   Передача нестрокового шаблона в <span class="function"><a href="function.mb-ereg-replace.php" class="function">mb_ereg_replace()</a></span> объявлена устаревшей.
   В данный момент нестроковые значения интерпретируются как кодовые точки ASCII.
   В PHP 8 шаблон будет обрабатываться как строка.
  </p>
  <p class="para">
   Передача кодировки в качестве 3-го параметра в <span class="function"><a href="function.mb-strrpos.php" class="function">mb_strrpos()</a></span> объявлена устаревшей.
   Вместо этого передавайте позицию как 0, а кодировку в 4-м параметре.
  </p>
 </div>

 <div class="sect2" id="migration74.deprecated.ldap">
  <h3 class="title">Облегчённый протокол доступа к каталогам (LDAP)</h3>

  <p class="para">
   Функции <span class="function"><a href="function.ldap-control-paged-result-response.php" class="function">ldap_control_paged_result_response()</a></span> и
   <span class="function"><a href="function.ldap-control-paged-result.php" class="function">ldap_control_paged_result()</a></span> объявлены устаревшими.
   Для управления постраничным режимом используйте функцию
   <span class="function"><a href="function.ldap-search.php" class="function">ldap_search()</a></span>.
  </p>
 </div>

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

  <p class="para">
   Вызовы <span class="methodname"><a href="reflectiontype.tostring.php" class="methodname">ReflectionType::__toString()</a></span> теперь создают уведомление об устаревшей возможности.
   Этот метод объявлен устаревшим в пользу использования  <span class="methodname"><a href="reflectionnamedtype.getname.php" class="methodname">ReflectionNamedType::getName()</a></span> в документации с PHP 7.1,
   но не выдавал соответствующего уведомления по техническим причинам.
  </p>
  <p class="para">
   Методы <code class="literal">export()</code> у всех классов <span class="classname"><a href="class.reflection.php" class="classname">Reflection</a></span> объявлены устаревшими.
   Теперь создавайте объект <span class="classname"><a href="class.reflection.php" class="classname">Reflection</a></span> и преобразуйте его в строку:
   <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">// Вместо ReflectionClass::export(Foo::class, false) используйте:<br /></span><span style="color: #007700">echo new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::class), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Вместо $str = ReflectionClass::export(Foo::class, true) используйте:<br /></span><span style="color: #0000BB">$str </span><span style="color: #007700">= (string) new </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::class);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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

 <div class="sect2" id="migration74.deprecated.socket">
  <h3 class="title">Сокеты</h3>

  <p class="para">
   Флаги <strong><code>AI_IDN_ALLOW_UNASSIGNED</code></strong> и
   <strong><code>AI_IDN_USE_STD3_ASCII_RULES</code></strong> для функции
   <span class="function"><a href="function.socket-addrinfo-lookup.php" class="function">socket_addrinfo_lookup()</a></span> объявлены устаревшими
   из-за обновления glibc.
  </p>
 </div>

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