[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Loader-Autoloader.xml
blobb6a802fca6063131a55b618c4daa7a12b019f7ce
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.loader.autoloader">
4     <title>Автозагрузчик</title>
6     <para>
7         <classname>Zend_Loader_Autoloader</classname> представляет собой
8         комплексное решение для автозагрузки. Он разрабатывался для следующих
9         целей:
10     </para>
12     <itemizedlist>
13         <listitem><para>
14             Предоставление настоящего автозарузчика пространств имен
15             (предыдущие реализации перехватывали все пространства имен подряд).
16         </para></listitem>
18         <listitem><para>
19             Возможность регистрации любых обратных вызовов в качестве
20             автозагрузчиков и управления ими как стеком (на момент написания
21             данного текста он позволяет обойти некоторые проблемы с
22             <code>spl_autoload</code>,
23             которые не позволяют заново регистрировать обратные вызовы,
24             использующие методы экземпляра).
25         </para></listitem>
27         <listitem><para>
28             Возможность оптимистического сопоставления (optimistic matching)
29             пространств имен для более быстрого определения пути к подключаемому
30             классу.
31         </para></listitem>
32     </itemizedlist>
34     <para>
35         <classname>Zend_Loader_Autoloader</classname> реализован в виде
36         синглетона, что делает его доступным из любого места.
37         Это дает возможность регистрировать дополнительные автозагрузчики
38         в любой момент выполнения, когда это необходимо.
39     </para>
41     <sect2 id="zend.loader.autoloader.usage">
42         <title>Использование автозагрузчика</title>
44         <para>
45             Когда экземпляр автозагрузчика извлекается в первый раз,
46             он регистрирует себя через <code>spl_autoload</code>.
47             Вы извлекаете экземпляр, используя метод <code>getInstance()</code>:
48         </para>
50         <programlisting language="php"><![CDATA[
51 $autoloader = Zend_Loader_Autoloader::getInstance();
52 ]]></programlisting>
54         <para>
55             По умолчанию автозагрузчик сконфигурирован с тем, чтобы
56             соответствовать пространствам имен "Zend_" и "ZendX_".
57             Если у вас есть есть своя библиотека, которая используют
58             собственное пространство имен, то вы можете зарегистрировать его
59             в автозагрузчике, используя метод <code>registerNamespace()</code>.
60             Например, если ваша библиотека представлена префиксом "My_", то вы
61             можете сделать это следующим образом:
62         </para>
64         <programlisting language="php"><![CDATA[
65 $autoloader->registerNamespace('My_');
66 ]]></programlisting>
68         <note>
69             <title>Префиксы пространств имен</title>
71             <para>
72                 Обратите внимание, что предыдущий пример использует в
73                 качестве префикса "My_", а не "My". Это из-за того, что
74                 <classname>Zend_Loader_Autoloader</classname> задуман как
75                 загрузчик общего назначения, и не предполагает,
76                 что префикс пространства имен должен включать в себя знак
77                 подчеркивания. Если ваше пространство имен классов
78                 включает в себя знак подчеркивания, то вы должны указывать его
79                 при регистрации вашего пространства имен.
80             </para>
81         </note>
83         <para>
84             Вы можете также регистрировать любые обратные вызовы для
85             автозагрузки, опционально с определенным пространством имен (или
86             группой пространств имен).
87             <classname>Zend_Loader_Autoloader</classname> будет искать
88             соответствие им до того, как использовать свой встроенный
89             механизм автозагрузки.
90         </para>
92         <para>
93             Например, вам можете захотеть использовать одну или более
94             компонент из eZcomponents в своем приложении на основе
95             Zend Framework. Для того, чтобы использовать возможности
96             eZcomponents по автозагрузке, добавьте его автозагрузчик в стек,
97             используя <code>pushAutoloader()</code>:
98         </para>
100         <programlisting language="php"><![CDATA[
101 $autoloader->pushAutoloader(array('ezcBase', 'autoload'), 'ezc');
102 ]]></programlisting>
104         <para>
105             Это говорит автозагрузчику, чтобы он использовал автозагрузчик
106             eZcomponents для классов, начинающихся с "ezc".
107         </para>
109         <para>
110             Вы можете использовать метод <code>unshiftAutoloader()</code>
111             для добавления автозагрузчика в начало цепочки автозагрузчиков.
112         </para>
114         <para>
115             По умолчанию <classname>Zend_Loader_Autoloader</classname> не
116             подавляет ошибки при использовании его внутреннего автозагрузчика,
117             который использует <classname>Zend_Loader::loadClass()</classname>.
118             В большинстве случаев это именно то, чего вы хотите.
119             Тем не менее, могут быть случаи, когда может потребоваться подавлять
120             их. Вы можете сделать это, используя метод
121             <code>suppressNotFoundWarnings()</code>:
122         </para>
124         <programlisting language="php"><![CDATA[
125 $autoloader->suppressNotFoundWarnings(true);
126 ]]></programlisting>
128         <para>
129             И наконец, иногда может потребоваться, чтобы автозагрузчик загружал
130             все пространства имен. Например, библиотеки PEAR не используют
131             общего пространства имен, что делает указание отдельных
132             пространств имен затруднительным, если используется много компонент
133             из PEAR. Вы можете использовать метод
134             <code>setFallbackAutoloader()</code>
135             для того, чтобы данный автозагрузчик был универсальным для всех
136             пространств имен:
137         </para>
139         <programlisting language="php"><![CDATA[
140 $autoloader->setFallbackAutoloader(true);
141 ]]></programlisting>
142     </sect2>
144     <sect2 id="zend.loader.autoloader.interface">
145         <title>Итерфейс автозагрузчика</title>
147         <para>
148             Кроме возможности указывать любые обратные вызовы в качестве
149             автозагрузчиков, Zend Framework предоставляет интерфейс,
150             который классы автозагрузчиков могут реализовывать -
151             <classname>Zend_Loader_Autoloader_Interface</classname>:
152         </para>
154         <programlisting language="php"><![CDATA[
155 interface Zend_Loader_Autoloader_Interface
157     public function autoload($class);
159 ]]></programlisting>
161         <para>
162             Используя этот интерфейс, вы можете передавать экземпляр
163             класса методам <classname>Zend_Loader_Autoloader</classname>-а
164             <code>pushAutoloader()</code> и <code>unshiftAutoloader()</code>:
165         </para>
167         <programlisting language="php"><![CDATA[
168 // Предполагается, что Foo_Autoloader реализует Zend_Loader_Autoloader_Interface:
169 $foo = new Foo_Autoloader();
171 $autoloader->pushAutoloader($foo, 'Foo_');
172 ]]></programlisting>
173     </sect2>
175     <sect2 id="zend.loader.autoloader.reference">
176         <title>Справка по автозагрузчику</title>
178         <para>
179             Ниже приведено руководство по методам, доступным в классе
180             <classname>Zend_Loader_Autoloader</classname>.
181         </para>
183         <table id="zend.loader.autoloader.reference.api">
184             <title>Методы Zend_Loader_Autoloader-а</title>
185             <tgroup cols="4">
186                 <thead>
187                     <row>
188                         <entry>Метод</entry>
189                         <entry>Возвращаемое значение</entry>
190                         <entry>Параметры</entry>
191                         <entry>Описание</entry>
192                     </row>
193                 </thead>
194                 <tbody>
195                     <row>
196                         <entry><code>getInstance()</code></entry>
197                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
198                         <entry>Нет</entry>
199                         <entry><para>
200                             Возвращает экземпляр-синглетон класса
201                             <classname>Zend_Loader_Autoloader</classname>.
202                             При первом извлечении он регистрирует
203                             себя через <code>spl_autoload</code>.
204                             Этот метод является статическим.
205                         </para></entry>
206                     </row>
208                     <row>
209                         <entry><code>resetInstance()</code></entry>
210                         <entry><code>void</code></entry>
211                         <entry>Нет</entry>
212                         <entry><para>
213                             Устанавливает состояние экземпляра-синглетона
214                             <classname>Zend_Loader_Autoloader</classname>
215                             в его исходное состояние, отменяя регистрацию
216                             всех обратных вызовов и всех зарегистрированных
217                             пространств имен.
218                         </para></entry>
219                     </row>
221                     <row>
222                         <entry><code>autoload($class)</code></entry>
223                         <entry><code>string|false</code></entry>
224                         <entry><itemizedlist>
225                             <listitem><para>
226                                 <varname>$class</varname>, <emphasis>обязательный</emphasis>.
227                                 Строка с именем класса для загрузки.
228                             </para></listitem>
229                         </itemizedlist></entry>
230                         <entry><para>
231                             Пытается определить путь к файлу по имени класса
232                             и загрузить его.
233                         </para></entry>
234                     </row>
236                     <row>
237                         <entry><code>setDefaultAutoloader($callback)</code></entry>
238                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
239                         <entry><itemizedlist>
240                             <listitem><para>
241                                 <varname>$callback</varname>, <emphasis>обязательный</emphasis>.
242                             </para></listitem>
243                         </itemizedlist></entry>
244                         <entry><para>
245                             Указывает альтернативный обратный вызов для
246                             применения в используемой по умолчанию реализации
247                             автозагрузчика.
248                         </para></entry>
249                     </row>
251                     <row>
252                         <entry><code>getDefaultAutoloader()</code></entry>
253                         <entry><code>callback</code></entry>
254                         <entry>Нет</entry>
255                         <entry><para>
256                             Возвращает используемую по умолчанию реализацию
257                             автозагрузчика; по умолчанию это
258                             <classname>Zend_Loader::loadClass()</classname>.
259                         </para></entry>
260                     </row>
262                     <row>
263                         <entry><code>setAutoloaders(array $autoloaders)</code></entry>
264                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
265                         <entry><itemizedlist>
266                             <listitem><para>
267                                 <varname>$autoloaders</varname>, <emphasis>обязательный</emphasis>.
268                             </para></listitem>
269                         </itemizedlist></entry>
270                         <entry><para>
271                             Устанавливает список автозагрузчиков для
272                             использования в стеке автозагрузчиков.
273                             Каждый элемент в массиве автозагрузчиков должен быть
274                             обратным вызовом PHP.
275                         </para></entry>
276                     </row>
278                     <row>
279                         <entry><code>getAutoloaders()</code></entry>
280                         <entry><type>Array</type></entry>
281                         <entry>Нет</entry>
282                         <entry><para>
283                             Возвращает внутренний стек автозагрузчиков.
284                         </para></entry>
285                     </row>
287                     <row>
288                         <entry><code>getNamespaceAutoloaders($namespace)</code></entry>
289                         <entry><type>Array</type></entry>
290                         <entry><itemizedlist>
291                             <listitem><para>
292                                 <varname>$namespace</varname>, <emphasis>обязательный</emphasis>
293                             </para></listitem>
294                         </itemizedlist></entry>
295                         <entry><para>
296                             Извлекает все автозагрузчики, которые были
297                             зарегистрированы для загрузки данного
298                             пространства имен.
299                         </para></entry>
300                     </row>
302                     <row>
303                         <entry><code>registerNamespace($namespace)</code></entry>
304                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
305                         <entry><itemizedlist>
306                             <listitem><para>
307                                 <varname>$namespace</varname>, <emphasis>обязательный</emphasis>.
308                             </para></listitem>
309                         </itemizedlist></entry>
310                         <entry><para>
311                             Регистрирует одно или более пространств имен с
312                             используемым по умолчанию автозагрузчиком.
313                             Если <varname>$namespace</varname> является строкой,
314                             то она регистрируется как пространство имен;
315                             если же массив строк, то все они
316                             регистрируются как пространства имен.
317                         </para></entry>
318                     </row>
320                     <row>
321                         <entry><code>unregisterNamespace($namespace)</code></entry>
322                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
323                         <entry><itemizedlist>
324                             <listitem><para>
325                                 <varname>$namespace</varname>, <emphasis>обязательный</emphasis>.
326                             </para></listitem>
327                         </itemizedlist></entry>
328                         <entry><para>
329                             Отменяет регистрацию одного или более пространств
330                             имен из используемого по умолчанию автозагрузчика.
331                             Если <varname>$namespace</varname> является строкой,
332                             то отменяется регистрация пространства имен
333                             под этим именем;
334                             если это массив строк, то отменяются
335                             регистрации всех пространств имен в этом массиве.
336                         </para></entry>
337                     </row>
339                     <row>
340                         <entry><code>getRegisteredNamespace()</code></entry>
341                         <entry><type>Array</type></entry>
342                         <entry>Нет</entry>
343                         <entry><para>
344                             Возвращает массив пространств имен,
345                             зарегистрированных с используемым по умолчанию
346                             автозагрузчиком.
347                         </para></entry>
348                     </row>
350                     <row>
351                         <entry><code>suppressNotFoundWarnings($flag = null)</code></entry>
352                         <entry><code>boolean|Zend_Loader_Autoloader</code></entry>
353                         <entry><itemizedlist>
354                             <listitem><para>
355                                 <varname>$flag</varname>, <emphasis>опциональный</emphasis>.
356                             </para></listitem>
357                         </itemizedlist></entry>
358                         <entry><para>
359                             Устанавливает или возвращает значение флага,
360                             который используется для указания того, должна ли
361                             применяемая по умолчанию реализация автозагрузчика
362                             подавлять предупреждение "файл не найден"
363                             ("file not found"). Если ему не передаются аргументы
364                             или передано значение null, то он возвращает
365                             булево значение, показывающее статус флага.
366                             Если же передано булево значение, то флаг
367                             принимает данное значение и возвращается
368                             экземпляр автозагрузчика (для возможности
369                             использования method chaining).
370                         </para></entry>
371                     </row>
373                     <row>
374                         <entry><code>setFallbackAutoloader($flag)</code></entry>
375                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
376                         <entry><itemizedlist>
377                             <listitem><para>
378                                 <varname>$flag</varname>, <emphasis>обязательный</emphasis>.
379                             </para></listitem>
380                         </itemizedlist></entry>
381                         <entry><para>
382                             Устанавливает значение флага, который используется
383                             для указания того, должен или нет применяемый по
384                             умолчанию автозагрузчик использоваться в качестве
385                             обратного вызова или универсального автозагрузчика
386                             для всех пространств имен.
387                         </para></entry>
388                     </row>
390                     <row>
391                         <entry><code>isFallbackAutoloader()</code></entry>
392                         <entry><type>Boolean</type></entry>
393                         <entry>Нет</entry>
394                         <entry><para>
395                             Возвращает значение флага, который используется для
396                             указания того, должен или нет применяемый по
397                             умолчанию автозагрузчик использоваться в качестве
398                             обратного вызова или универсального автозагрузчика
399                             для всех пространств имен.
400                             По умолчанию его значение равно false.
401                         </para></entry>
402                     </row>
404                     <row>
405                         <entry><code>getClassAutoloaders($class)</code></entry>
406                         <entry><type>Array</type></entry>
407                         <entry><itemizedlist>
408                             <listitem><para>
409                                 <varname>$class</varname>, <emphasis>обязательный</emphasis>.
410                             </para></listitem>
411                         </itemizedlist></entry>
412                         <entry><para>
413                             Возвращает список автозагрузчиков, которые могут
414                             соответствовать данному классу. Если нет ни одного
415                             подходящего автозагрузчика, то возвращаются все
416                             глобальные (без привязки к пространству имен)
417                             автозагрузчики.
418                         </para></entry>
419                     </row>
421                     <row>
422                         <entry><code>unshiftAutoloader($callback, $namespace = '')</code></entry>
423                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
424                         <entry><itemizedlist>
425                             <listitem><para>
426                                 <varname>$callback</varname>, <emphasis>обязательный</emphasis>.
427                                 Обратный вызов PHP
428                             </para></listitem>
430                             <listitem><para>
431                                 <varname>$namespace</varname>, <emphasis>опциональный</emphasis>.
432                                 Строка с префиксом имен классов, используемым в
433                                 качестве пространства имен.
434                             </para></listitem>
435                         </itemizedlist></entry>
436                         <entry><para>
437                             Добавляет конкретную реализацию автозагрузчика
438                             в начало внутреннего стека автозагрузчиков. Если
439                             было передано пространство имен, то оно будет
440                             использовано для оптимистического сопоставления
441                             (optimistic matching), иначе автозагрузчик будет
442                             использоваться в качестве глобального.
443                         </para></entry>
444                     </row>
446                     <row>
447                         <entry><code>pushAutoloader($callback, $namespace = '')</code></entry>
448                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
449                         <entry><itemizedlist>
450                             <listitem><para>
451                                 <varname>$callback</varname>, <emphasis>обязательный</emphasis>.
452                                 Обратный вызов PHP
453                             </para></listitem>
455                             <listitem><para>
456                                 <varname>$namespace</varname>, <emphasis>опциональный</emphasis>.
457                                 Строка с префиксом имен классов, используемым в
458                                 качестве пространства имен.
459                             </para></listitem>
460                         </itemizedlist></entry>
461                         <entry><para>
462                             Добавляет конкретную реализацию автозагрузчика
463                             в конец внутреннего стека автозагрузчиков. Если
464                             было передано пространство имен, то оно будет
465                             использовано для оптимистического сопоставления
466                             (optimistic matching), иначе автозагрузчик будет
467                             использоваться в качестве глобального.
468                         </para></entry>
469                     </row>
471                     <row>
472                         <entry><code>removeAutoloader($callback, $namespace = '')</code></entry>
473                         <entry><classname>Zend_Loader_Autoloader</classname></entry>
474                         <entry><itemizedlist>
475                             <listitem><para>
476                                 <varname>$callback</varname>, <emphasis>обязательный</emphasis>.
477                                 Обратный вызов PHP
478                             </para></listitem>
480                             <listitem><para>
481                                 <varname>$namespace</varname>, <emphasis>опциональный</emphasis>.
482                                 Строка, представляющая собой префикс имен
483                                 классов (используемый в качестве пространства
484                                 имен) или массив строк с префиксами.
485                             </para></listitem>
486                         </itemizedlist></entry>
487                         <entry><para>
488                             Удаляет конкретную реализацию автозагрузчика из
489                             внутреннего стека автозагрузчиков.
490                             Если предоставлено пространство (пространства) имен,
491                             то обратный вызов будет удален только для данного
492                             пространства (пространств) имен.
493                         </para></entry>
494                     </row>
495                 </tbody>
496             </tgroup>
497         </table>
498     </sect2>
499 </sect1>