Files
doc-fr/language/oop5/autoload.xml
2022-05-27 17:46:58 -04:00

125 lines
3.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: fca50d321ce57036f3786f278887abe58cd41de8 Maintainer: jpauli Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook">
<title>Auto-chargement de classes</title>
<para>
De nombreux développeurs qui écrivent des applications orientées objet
créent un fichier source par définition de classe. Un des plus gros inconvénients
de cette méthode est d'avoir à écrire une longue liste d'inclusions de
fichier de classes au début de chaque script : une inclusion par classe.
</para>
<para>
La fonction <function>spl_autoload_register</function> enregistre un nombre quelconque de
chargeurs automatiques, ce qui permet aux classes et aux interfaces d'être
automatiquement chargées si elles ne sont pas définies actuellement.
En enregistrant des autochargeurs, PHP donne une dernière chance d'inclure une
définition de classe ou interface, avant que PHP n'échoue avec une erreur.
</para>
<para>
Toute construction similaire à des classes peuvent être autochargées de la
même manière. Ceci inclut les classes, interfaces, trait, et énumérations.
</para>
<caution>
<para>
Antérieur à PHP 8.0.0, il était possible d'utiliser <function>__autoload</function>
pour autocharger les classes et interfaces. Cependant c'est une alternative
moins flexible à <function>spl_autoload_register</function> et
<function>__autoload</function> est obsolète à partir de PHP 7.2.0,
et supprimée à partir de PHP 8.0.0.
</para>
</caution>
<note>
<para>
<function>spl_autoload_register</function> peut être appelée plusieurs fois
pour enregistrer plusieurs autochargeur. Lancer une exception depuis une
fonction d'autochargement, interrompra ce processus et ne permet pas aux
fonctions d'autochargement suivantes à être exécutées. Pour cette raison,
lancer des exceptions depuis une fonction d'autochargement est fortement
découragée.
</para>
</note>
<para>
<example>
<title>Exemple d'autochargement</title>
<para>
Cet exemple tente de charger les classes <literal>MaClasse1</literal>
et <literal>MaClasse2</literal>, respectivement depuis les fichiers
<filename>MaClasse1.php</filename> et
<filename>MaClasse2.php</filename>.
</para>
<programlisting role="php">
<![CDATA[
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MaClasse1();
$obj2 = new MaClasse2();
?>
]]>
</programlisting>
</example>
<example>
<title>Autre exemple d'autochargement</title>
<para>
Cet exemple tente de charger l'interface <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><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
-->