-
Notifications
You must be signed in to change notification settings - Fork 788
/
Copy pathautoload.xml
142 lines (132 loc) · 4.17 KB
/
autoload.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook">
<title>Autoloading Classes</title>
<para>
Many developers writing object-oriented applications create
one PHP source file per class definition. One of the biggest
annoyances is having to write a long list of needed includes
at the beginning of each script (one for each class).
</para>
<para>
The <function>spl_autoload_register</function> function registers any number of
autoloaders, enabling for classes and interfaces to be automatically loaded
if they are currently not defined. By registering autoloaders, PHP is given
a last chance to load the class or interface before it fails with an error.
</para>
<para>
Any class-like construct may be autoloaded the same way. That includes classes,
interfaces, traits, and enumerations.
</para>
<caution>
<para>
Prior to PHP 8.0.0, it was possible to use <function>__autoload</function>
to autoload classes and interfaces. However, it is a less flexible
alternative to <function>spl_autoload_register</function> and
<function>__autoload</function> is deprecated as of PHP 7.2.0, and removed
as of PHP 8.0.0.
</para>
</caution>
<note>
<para>
<function>spl_autoload_register</function> may be called multiple times in order
to register multiple autoloaders. Throwing an exception from an autoload function,
however, will interrupt that process and not allow further autoload functions to
run. For that reason, throwing exceptions from an autoload function is strongly
discouraged.
</para>
</note>
<para>
<example>
<title>Autoload example</title>
<para>
This example attempts to load the classes <literal>MyClass1</literal>
and <literal>MyClass2</literal> from the files <filename>MyClass1.php</filename>
and <filename>MyClass2.php</filename> respectively.
</para>
<programlisting role="php" annotations="interactive">
<![CDATA[
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
]]>
</programlisting>
</example>
<example>
<title>Autoload other example</title>
<para>
This example attempts to load the 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>
<example>
<title>Using Composer's autoloader</title>
<simpara>
&link.composer; generates a <literal>vendor/autoload.php</literal>
which is set up to automatically load packages that are being managed
by Composer. By including this file, those packages can be used without
any additional work.
</simpara>
<programlisting role="php" annotations="interactive">
<![CDATA[
<?php
require __DIR__ . '/vendor/autoload.php';
$uuid = Ramsey\Uuid\Uuid::uuid7();
echo "Generated new UUID -> ", $uuid->toString(), "\n";
?>
]]>
</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
-->