Files
php-doc-ru/reference/mbstring/overloading.xml

146 lines
5.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 669c19f74eba53dc8437027380ecc6a6a59ab0bf Maintainer: tmn Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="mbstring.overload" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>
Механизм перегрузки функций
</title>
<para>
&warn.deprecated.feature-7-2-0.removed-8-0-0;
</para>
<para>
Зачастую заставить работать существующее PHP-приложение в многобайтовом
окружении оказывается довольно трудной задачей. Это происходит, потому что
большинство PHP-приложений написано с использованием стандартных функций
обработки строк, таких как <function>substr</function>, которые не умеют
работать со строками в многобайтовых кодировках.
</para>
<para>
mbstring поддерживает механизм 'перегрузки функций', который позволяет
сообщить приложению о том, что используется многобайтовая кодировка, без
модификации кода, отвечающего за работу со строками. Например, если включена
перегрузка функций, то функция <function>mb_substr</function> будет вызываться
вместо <function>substr</function>. Этот механизм во многих случаях позволяет
портировать приложения, поддерживающие только однобайтовые кодировки, в
многобайтное окружение.
</para>
<para>
Для использования механизма перегрузки функций нужно задать настройке
<literal>mbstring.func_overload</literal> в &php.ini; положительное значение,
которое представляет собой комбинацию битовых масок, определяющих категории
функций, которые нужно перегружать. Это будет число 1 для перегрузки функции
<function>mail</function>. 2 для строковых функций, 4 для функций регулярных
выражений. Например, если значение настройки равно 7, то почтовые, строковые и
функции регулярных выражений будут перегружаться. Список перегружаемых функций
приведён ниже.
<table>
<title>Функции, которые будут перегружены</title>
<tgroup cols="3">
<thead>
<row>
<entry>значение настройки mbstring.func_overload</entry>
<entry>исходная функция</entry>
<entry>перегруженная функция</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry><function>mail</function></entry>
<entry><function>mb_send_mail</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strlen</function></entry>
<entry><function>mb_strlen</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strpos</function></entry>
<entry><function>mb_strpos</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strrpos</function></entry>
<entry><function>mb_strrpos</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>substr</function></entry>
<entry><function>mb_substr</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strtolower</function></entry>
<entry><function>mb_strtolower</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strtoupper</function></entry>
<entry><function>mb_strtoupper</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>stripos</function></entry>
<entry><function>mb_stripos</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strripos</function></entry>
<entry><function>mb_strripos</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strstr</function></entry>
<entry><function>mb_strstr</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>stristr</function></entry>
<entry><function>mb_stristr</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>strrchr</function></entry>
<entry><function>mb_strrchr</function></entry>
</row>
<row>
<entry>2</entry>
<entry><function>substr_count</function></entry>
<entry><function>mb_substr_count</function></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<note>
<para>
Не рекомендуется использовать перегрузку функций в контексте
каждой директории, так как добиться стабильной работы в этом случае пока
не удалось, и это может привести к неожидаемому поведению приложения.
</para>
</note>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->