File: autoload.xml

package info (click to toggle)
php-doc 20100521-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze, wheezy
  • size: 59,992 kB
  • ctags: 4,085
  • sloc: xml: 796,833; php: 21,338; cpp: 500; sh: 117; makefile: 58; awk: 28
file content (184 lines) | stat: -rw-r--r-- 4,987 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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 299619 $ -->
 <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>
   In PHP 5, this is no longer necessary. You may define an
   __autoload function which is automatically
   called in case you are trying to use a class/interface which hasn't been
   defined yet. By calling this function the scripting engine is given
   a last chance to load the class before PHP fails with an error.
  </para>
  <note>
   <para>
    Prior to 5.3.0, exceptions thrown in the __autoload function could not be
    caught in the <link linkend="language.exceptions">catch</link> block and
    would result in a fatal error. From 5.3.0+ exceptions thrown in the
    __autoload function can be caught in the <link linkend="language.exceptions">
    catch</link> block, with 1 provision. If throwing a custom exception, then
    the custom exception class must be available. The __autoload function may
    be used recursively to autoload the custom exception class.
   </para>
  </note>
  <note>
   <para>
    Autoloading is not available if using PHP in CLI
    <link linkend="features.commandline">interactive mode</link>.
   </para>
  </note>
  <note>
   <para>
    If the class name is used e.g. in <function>call_user_func</function> then
    it can contain some dangerous characters such as <literal>../</literal>.
    It is recommended to not use the user-input in such functions or at least
    verify the input in <function>__autoload</function>.
   </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
function __autoload($class_name) {
    require_once $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

function __autoload($name) {
    var_dump($name);
}

class Foo implements ITest {
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>
]]>
    </programlisting>
   </example>
   <example>
    <title>Autoloading with exception handling for 5.3.0+</title>
    <para>
     This example throws an exception and demonstrates the try/catch block.
    </para>
    <programlisting role="php">
<![CDATA[
<?php
function __autoload($name) {
    echo "Want to load $name.\n";
    throw new Exception("Unable to load $name.");
}

try {
    $obj = new NonLoadableClass();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
Want to load NonLoadableClass.
Unable to load NonLoadableClass.
]]>
    </screen>
   </example>
   <example>
    <title>Autoloading with exception handling for 5.3.0+ - Missing custom exception</title>
    <para>
     This example throws an exception for a non-loadable, custom exception.
    </para>
    <programlisting role="php">
<![CDATA[
<?php
function __autoload($name) {
    echo "Want to load $name.\n";
    throw new MissingException("Unable to load $name.");
}

try {
    $obj = new NonLoadableClass();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
Want to load NonLoadableClass.
Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4
]]>
    </screen>
   </example>
  </para>

  <simplesect role="seealso">
   &reftitle.seealso;
   <para>
    <simplelist>
     <member><function>unserialize</function></member>
     <member><link linkend="unserialize-callback-func">unserialize_callback_func</link></member>
     <member><function>spl_autoload</function></member>
     <member><function>spl_autoload_register</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
-->