[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Registry.xml
blobe9e78e301659f1894921beaa7cb99db9204dfa76
1 <sect1 id="zend.registry.using">
3     <title>Использование реестра<!--Using the Registry--></title>
5     <para>
6         Реестр является контейнером для хранения объектов и значений в
7         среде приложения. Посредством сохранения значения в реестре
8         объект становится доступным всему приложению. Этот механизм является
9         альтернативой использованию глобальных переменных.
10 <!--
11         The registry is a container for storing objects and values in the
12         application space.  By storing the value in the registry, the same
13         object is always available throughout your application.
14         This mechanism is an alternative to using global storage.
15 -->
16     </para>
18     <para>
19         Типовое использование реестра - использование статических методов класса
20         Zend_Registry. Вы можете также обращаться к элементам, сохраненным в
21         реестре, как к элементам массива, поскольку класс реестра наследует от
22         ArrayObject.
23 <!--
24         The typical usage of the registry is through static methods in the
25         Zend_Registry class.  Alternatively, the class is an array object,
26         so you can access elements stored within it with a convenient
27         array-like interface.
28 -->
29     </para>
31     <sect2 id="zend.registry.using.storing">
33         <title>Установка значений в реестре<!--Setting Values in the Registry--></title>
35         <para>
36             Для того, чтобы сохранить значение в реестре, используйте
37             статический метод <code>set()</code>.
38 <!--
39             To store an entry in the registry, use the static method
40             <code>set()</code>.
41 -->
42         </para>
44         <example id="zend.registry.using.storing.example">
45             <title>Пример использования метода set()<!--Example of set() method--></title>
46             <programlisting language="php"><![CDATA[<?php
48 Zend_Registry::set('index', $value);
50 ?>]]></programlisting>
51         </example>
53         <para>
54             Сохраняемое значение может быть объектом, массивом или скаляром. Вы
55             можете изменить значение, сохраненное под определенным индексом в
56             реестре, устанавливая новое значение методом <code>set()</code>.
57 <!--
58             The value can be an object, an array, or a scalar.
59             You can change the value stored in a specific entry of
60             the registry by using <code>set()</code> to set it
61             to a new value.
62 -->
63         </para>
65         <para>
66             Индекс может быть строкой или целочисленным значением, как в обычном
67             массиве.
68 <!--
69             The index can be a scalar, either string or integer,
70             like an ordinary array.
71 -->
72         </para>
74     </sect2>
76     <sect2 id="zend.registry.using.retrieving">
78         <title>Получение значений из реестра<!--Getting Values from the Registry--></title>
80         <para>
81             Для того, чтобы получить запись из реестра, используйте статический
82             метод <code>get()</code>.
83 <!--
84             To retrieve an entry from the registry, use the static method
85             <code>get()</code>.
86 -->
87         </para>
89         <example id="zend.registry.using.retrieving.example">
90             <title>Пример использования метода get()<!--Example of get() method--></title>
91             <programlisting language="php"><![CDATA[<?php
93 $value = Zend_Registry::get('index');
95 ?>]]></programlisting>
96         </example>
98         <para>
99             Метод <code>getInstance()</code> возвращает статический объект
100             реестра.
101 <!--
102             The <code>getInstance()</code> method returns the static registry object.
104         </para>
106         <para>
107             По объекту реестра можно производить итерацию.
108 <!--
109             A registry object is iterable.
111         </para>
113         <example id="zend.registry.using.retrieving.example-iterating">
114             <title>Пример итерации по реестру<!--Example of iterating over the registry--></title>
115             <programlisting language="php"><![CDATA[<?php
117 $registry = Zend_Registry::getInstance();
119 foreach ($registry as $index => $value) {
120     echo "Registry index $index contains:\n";
121     var_dump($value);
124 ?>]]></programlisting>
125         </example>
127     </sect2>
129     <sect2 id="zend.registry.using.constructing">
131         <title>Создание объекта реестра<!--Constructing a Registry Object--></title>
133         <para>
134             Кроме доступа к статическому реестру через статические методы, вы
135             можете также непосредственно создавать экземпляр реестра и
136             использовать его как объект.
137 <!--
138             In addition to accessing the static registry through
139             static methods, you can create an instance directly and
140             use it as an object.
142         </para>
144         <para>
145             Экземпляр реестра, к которому вы обращаетесь через статические
146             методы, просто является одним из таких экземпляров. Это сделано в
147             целях удобства, т.к. оно сохраняется статически и вы можете
148             обращаться к нему из любого места своего приложения.
149 <!--
150             The registry instance you access through the
151             static methods is simply one such instance, and it is
152             for convenience that it is stored statically, so you
153             can access it from anywhere in your appliation.
155         </para>
157         <para>
158             Используйте традиционный конструктор <code>new</code> для создания
159             экземпляра реестра. Это дает возможность иницизировать записи в
160             реестре так же, как в массиве.
161 <!--
162             Use a traditional <code>new</code> constructor to create
163             an instance of the registry.  This gives you the opportunity
164             to initialize the entries in the registry as an associatve
165             array.
167         </para>
169         <example id="zend.registry.using.constructing.example">
170             <title>Пример создания реестра<!--Example of constructing a registry--></title>
171             <programlisting language="php"><![CDATA[<?php
173 $registry = new Zend_Registry(array('index' => $value));
175 ?>]]></programlisting>
176         </example>
178         <para>
179             После создания экземпляра вы можете использовать его с применением
180             методов доступа ArrayObject, или установить его как
181             статический экземпляр, используя статический метод
182             <code>setInstance()</code>.
183 <!--
184             After constructing this instance, you can use it using
185             array-object methods, or you can set this instance
186             to become the static instance using the static method
187             <code>setInstance()</code>.
189         </para>
191         <example id="zend.registry.using.constructing.example-setinstance">
192             <title>Пример инициализации статического реестра<!--Example of initializing the static registry--></title>
193             <programlisting language="php"><![CDATA[<?php
195 $registry = new Zend_Registry(array('index' => $value));
197 Zend_Registry::setInstance($registry);
199 ?>]]></programlisting>
200         </example>
202         <para>
203             Метод <code>setInstance()</code> бросает исключение Zend_Exception,
204             если статический реестр уже был проинициализирован до
205             первого обращения к нему.
206 <!--
207             The <code>setInstance()</code> method throws a Zend_Exception
208             if the static registry has already been initialized by its
209             first access.
211         </para>
213     </sect2>
215     <sect2 id="zend.registry.using.array-access">
217         <title>Доступ к реестру как к массиву<!--Accessing the Registry as an Array--></title>
219         <para>
220             Если необходимо установить или получить несколько значений, то
221             может быть удобным использовать для этого нотацию доступа к
222             массивам.
223 <!--
224             If you have several values to get or set, you may find it
225             convenient to access the registry with array notation.
227         </para>
229         <example id="zend.registry.using.array-access.example">
230             <title>Пример доступа как к массиву<!--Example of array access--></title>
231             <programlisting language="php"><![CDATA[<?php
233 $registry = Zend_Registry::getInstance();
235 $registry['index'] = $value;
237 var_dump( $registry['index'] );
239 ?>]]></programlisting>
240         </example>
242     </sect2>
244     <sect2 id="zend.registry.using.array-object">
246         <title>Доступ к реестру как к объекту <!--Accessing the Registry as an Object--></title>
248         <para>
249             К реестру можно обращаться так же, как к объекту, используя имена
250             индексов как имена свойств объекта. Для этого нужно специальным
251             образом создать объект, используя опцию
252             <code>ArrayObject::ARRAY_AS_PROPS</code>, и инициализировать
253             статический экземпляр. Необходимо сделать это до того, как будет
254             сделано первое обращение к статическому реестру.
255             <emphasis>Будьте осторожны</emphasis>, используя эту
256             опцию, поскольку некоторые версии PHP имеют ошибки, связанные с этой
257             опцией.
258 <!--
259             You may also find it convenient to access the registry
260             in an object-oriented fashion, using index names as object
261             properties.
262             To do this, you need to specifically construct the registry
263             object using the <code>ArrayObject::ARRAY_AS_PROPS</code> option,
264             and initialize the static instance.  You must do this before
265             the static registry has been accessed for the first time.
266             <emphasis>Beware</emphasis> of using this option,
267             since some versions of PHP have bugs when using the registry
268             with this option.
270         </para>
272         <example id="zend.registry.using.array-object.example">
273             <title>Пример доступа как к объекту<!--Example of object access--></title>
274             <programlisting language="php"><![CDATA[<?php
276 // в загрузочном коде:
277 $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS)
278 Zend_Registry::setInstance($registry);
279 $registry->tree = 'apple';
285 // в различных функциях и где-либо еще в приложении:
286 $registry = Zend_Registry::getInstance();
288 echo $registry->tree; // выводит "apple"
290 $registry->index = $value;
292 var_dump($registry->index);
294 ?>]]></programlisting>
295         </example>
297     </sect2>
299     <sect2 id="zend.registry.using.isset">
301         <title>Проверка существования индекса<!--Querying if an index exists--></title>
303         <para>
304             Для проверки того, существует ли в реестре значение под определенным
305             индексом, используйте <code>isRegistered()</code>.
306 <!--
307             To find out if a particular index in the registry
308             has a value, use the static method <code>isRegistered()</code>.
310         </para>
312         <example id="zend.registry.using.isset.example-isregistered">
313             <title>Пример использования метода isRegistered()<!--Example of isRegistered() method--></title>
314             <programlisting language="php"><![CDATA[<?php
316 if (Zend_Registry::isRegistered($index)) {
317     $value = Zend_Registry::get($index);
320 ?>]]></programlisting>
321         </example>
323         <para>
324             Для того, чтобы найти определенный индекс в объекте реестра,
325             используйте конструкцию isset(), как в случае обычного массива.
326 <!--
327             To find out if a particular index in a registry
328             array-object has a value, use <code>isset()</code>
329             like you would with an ordinary array.
331         </para>
333         <example id="zend.registry.using.isset.example-isset">
334             <title>Пример использования метода isset()<!--Example of isset() method--></title>
335             <programlisting language="php"><![CDATA[<?php
337 $registry = Zend_Registry::getInstance();
339 // используется синтаксис доступа к массиву
340 if (isset($registry['index'])) {
341     var_dump( $registry['index'] );
344 // используется синтаксис доступа к объекту (должен быть включен)
345 if (isset($registry->index)) {
346     var_dump( $registry->index );
349 ?>]]></programlisting>
350         </example>
352     </sect2>
354     <sect2 id="zend.registry.using.subclassing">
356         <title>Создание подклассов<!--Extending the Registry--></title>
358         <para>
359             Статический реестр является экземпляром класса Zend_Registry. Если
360             вы хотите добавить в реестр дополнительный функционал, то можете
361             создать класс, наследующий от Zend_Registry и определить его как
362             используемый для статического реестра. Используйте статический метод
363             <code>setClassName()</code> для установки класса. Этот класс должен
364             наследовать от Zend_Registry.
365 <!--
366             The static registry is an instance of the class Zend_Registry.
367             If you want to add functionality to the registry, you can
368             create a class that extends Zend_Registry, and then you can
369             specify this class as the class to use for the static registry.
370             Use the static method <code>setClassName()</code> to specify
371             the class.  The class must extend Zend_Registry.
373         </para>
375         <example id="zend.registry.using.subclassing.example">
376             <title>Пример установки класса статического реестра<!--Example of specifying the static registry's class name--></title>
377             <programlisting language="php"><![CDATA[<?php
379 Zend_Registry::setClassName('My_Registry');
381 Zend_Registry::set('index', $value);
383 ?>]]></programlisting>
384         </example>
386         <para>
387             Реестр бросает исключение, если вы пытаетесь установить имя класса,
388             используемого для статического реестра, после того, как было первое
389             обращение к реестру. Рекомендуется устанавливать имя класса в
390             загрузочном коде.
391 <!--
392             The registry throws a Zend_Exception if you try to set the
393             classname after the registry has been accessed for the first time.
394             It is recommended that you specify the classname for your
395             static registry in your application bootstrap.
397         </para>
399     </sect2>
401     <sect2 id="zend.registry.using.unsetting">
403         <title>Уничтожение статического реестра<!--Unsetting the Static Registry--></title>
405         <para>
406             Хотя обычно в этом нет необходимости, вы можете уничтожить
407             статический экземпляр реестра. Для этого используйте метод
408             <code>_unsetInstance()</code>.
409 <!--
410             Although it is not normally necessary, you can
411             unset the static instance of the registry.
412             Use the static method <code>_unsetInstance()</code>.
414         </para>
416         <note>
417             <title>Угроза потери данных<!--Data loss risk--></title>
418             <para>
419                 Когда используете <code>_unsetInstance()</code>, все данные
420                 в статическом реестре удаляются и не могут быть восстановлены.
421 <!--
422                 When you use <code>_unsetInstance()</code>,
423                 all data in the static registry are
424                 discarded and cannot be recovered.
426             </para>
427         </note>
429         <para>
430             Вы можете применять данный метод, если, например, хотите
431             использовать <code>setInstance()</code> или
432             <code>setClassName()</code> после того, как был проинциализирован
433             объект статического реестра. Уничтожение статического экземпляра
434             дает возможность использовать эти методы.
435 <!--
436             You might use this method, for example, if you want to
437             use <code>setInstance()</code> or <code>setClassName()</code>
438             after the static registry object has been initialized.
439             Unsetting the static instance allows you to use these methods.
441         </para>
443         <example id="zend.registry.using.unsetting.example">
444             <title>Пример использования метода _unsetInstance()<!--Example of _unsetInstance() method--></title>
445             <programlisting language="php"><![CDATA[<?php
447 Zend_Registry::set('index', $value);
449 Zend_Registry::_unsetInstance();
451 // изменение класса
452 Zend_Registry::setClassName('My_Registry');
454 Zend_Registry::set('index', $value);
456 ?>]]></programlisting>
457         </example>
459     </sect2>
461 </sect1>
462 <!--
463 vim:se ts=4 sw=4 et: