File: autoload.xml

package info (click to toggle)
php-doc 20241205~git.dfcbb86%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 70,956 kB
  • sloc: xml: 968,269; php: 23,883; javascript: 671; sh: 177; makefile: 37
file content (142 lines) | stat: -rw-r--r-- 4,219 bytes parent folder | download
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">
<![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">
<![CDATA[
<?php
require __DIR__ . '/vendor/autoload.php';

$uuid = new 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
-->