1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-29 03:02:11 +02:00
Files
archived-doc-ru/language/oop5/autoload.xml
2024-03-22 17:33:51 +03:00

128 lines
4.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: ce3a2d381693ccbc10cc4a808c3eb853f3c85c9e Maintainer: irker Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook">
<title>Автоматическая загрузка классов</title>
<para>
Разработчики объектно-ориентированных приложений
договорились создавать по одному исходному PHP-файлу для каждого класса.
Главная неприятность — приходится в начале каждого скрипта
писать длинный список включений, по одному для каждого файла,
который требуется загрузить.
</para>
<para>
Функция <function>spl_autoload_register</function>
регистрирует нужное количество автозагрузчиков
для автоматической загрузки классов и интерфейсов,
которые пока не определили.
Регистрация автозагрузчиков даёт PHP последний шанс загрузить класс
или интерфейс, прежде чем скрипт завершит работу с ошибкой.
</para>
<para>
Все классоподобные конструкции получится загрузить автоматически таким же способом,
включая классы, интерфейсы, трейты и перечисления.
</para>
<caution>
<para>
До PHP 8.0.0 классы и интерфейсы загружали автоматически
функцией <function>__autoload</function>.
Однако это менее гибкая альтернатива функции
<function>spl_autoload_register</function>,
а функцию <function>__autoload</function> объявили устаревшей в PHP 7.2.0
и удалили в PHP 8.0.0.
</para>
</caution>
<note>
<para>
Функцию <function>spl_autoload_register</function> разрешается
вызывать больше одного раза, чтобы зарегистрировать больше одного автозагрузчика.
Если функция автозагрузки выбросит исключение,
оно прервёт процесс автозагрузки и не разрешит запускать следующие функции автозагрузки.
Поэтому выбрасывать исключения из функции автозагрузки настоятельно не рекомендуется.
</para>
</note>
<para>
<example>
<title>Пример автоматической загрузки</title>
<para>
В этом примере функция пытается загрузить класс <literal>MyClass1</literal>
из файла <filename>MyClass1.php</filename> и класс <literal>MyClass2</literal>
из файла <filename>MyClass2.php</filename>.
</para>
<programlisting role="php">
<![CDATA[
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
]]>
</programlisting>
</example>
<example>
<title>Ещё один пример автоматической загрузки</title>
<para>
В этом примере функция пытается загрузить интерфейс <literal>ITest</literal>.
</para>
<programlisting role="php">
<![CDATA[
<?php
spl_autoload_register(function ($name) {
var_dump($name);
});
class Foo implements ITest {}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
]]>
</programlisting>
</example>
</para>
<simplesect role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>unserialize</function></member>
<member><link linkend="ini.unserialize-callback-func">unserialize_callback_func</link></member>
<member><link linkend="ini.unserialize-max-depth">unserialize_max_depth</link></member>
<member><function>spl_autoload_register</function></member>
<member><function>spl_autoload</function></member>
<member><function>__autoload</function></member>
</simplelist>
</para>
</simplesect>
</sect1>
<!-- 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
-->