mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 17:32:07 +01:00
125 lines
3.8 KiB
XML
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
|
|
-->
|