[MANUAL] English:
[zend.git] / documentation / manual / pl / module_specs / Zend_Loader.xml
blob6408a7ae54b02537ddf7bd22fb4d2229b05a53f0
1 <sect1 id="zend.loader.load">
3     <title>Dynamiczne ładowanie plików i klas</title>
5     <para>
6         Klasa <code>Zend_Loader</code> zawiera metody pomagające ci w dynamicznym ładowaniu
7         plików.
8     </para>
10     <tip>
11         <title>Zend_Loader a require_once()</title>
12         <para>
13             Metody klasy <code>Zend_Loader</code> są przydatne gdy nazwa pliku, który chcesz
14             załadować jest zmienną. Na przykład, jeśli nazwa jest oparta na
15             parametrze pochodzącym od użytkownika lub argumencie metody.
16             Jeśli ładujesz plik lub klasę których nazwą jest stała, nie ma
17             dodatkowych korzyści z użycia <code>Zend_Loader</code> zamiast tradycyjnych
18             funkcji PHP takich jak
19             <ulink url="http://php.net/require_once"><code>require_once()</code></ulink>.
20         </para>
21     </tip>
23     <sect2 id="zend.loader.load.file">
25         <title>Ładowanie plików</title>
27         <para>
28             Statyczna metoda <code>Zend_Loader::loadFile()</code> ładuje plik
29             PHP. Ładowany plik może zawierać dowolny kod PHP. Ta metoda używa
30             funkcji PHP
31             <ulink url="http://php.net/include"><code>include()</code></ulink>.
32             Metoda ta wyrzuca wyjątek <code>Zend_Exception</code> w przypadku
33             niepowodzenia, na przykład gdy dany plik nie istnieje.
34         </para>
36         <example id="zend.loader.load.file.example">
37             <title>Przykład użycia metody loadFile()</title>
38             <programlisting role="php"><![CDATA[
39 Zend_Loader::loadFile($filename, $dirs=null, $once=false);
40 ]]>
41             </programlisting>
42     </example>
44         <para>
45             Argument <code>$filename</code> określa nazwę pliku do załadowania,
46             nazwa ta nie może zawierać żadnych informacji o ścieżce.
47             Parametr <code>$filename</code> jest sprawdzany pod kątem
48             bezpieczeństwa. Argument <code>$filename</code> może zawierać
49             jedynie znaki alfanumeryczne, myślniki ("-"), podkreślniki ("_"),
50             oraz kropki ("."). Argument <code>$dirs</code> może być dowolny.
51         </para>
53         <para>
54             Argument <code>$dirs</code> określa katalogi, które mają być
55             sprawdzone w poszukiwaniu pliku. Jeśli ma wartość <code>NULL</code>,
56             sprawdzane są jedynie ścieżki z dyrektywy <code>include_path</code>.
57             Jeśli jest łańcuchem znaków lub tablicą, ścieżka lub ścieżki będą
58             przeszukane, a następnie zostaną sprawdzone ścieżki z dyrektywy
59             <code>include_path</code>.
60         </para>
62         <para>
63             Argument <code>$once</code> jest zmienną logiczną. Jeśli ma wartość
64             <code>TRUE</code>, to metoda <code>Zend_Loader::loadFile()</code>
65             używa do ładowania pliku funkcji PHP
66             <ulink url="http://php.net/include"><code>include_once()</code></ulink>,
67             w przeciwnym wypadku używa funkcji PHP
68             <ulink url="http://php.net/include_once"><code>include()</code></ulink>.
69         </para>
71     </sect2>
73     <sect2 id="zend.loader.load.class">
75         <title>Ładowanie klas</title>
77         <para>
78             Statyczna metoda <code>Zend_Loader::loadClass($class, $dirs)</code>
79             ładuje plik PHP, a następnie sprawdza czy dana klasa istnieje.
80         </para>
82         <example id="zend.loader.load.class.example">
83             <title>Przykład użycia metody loadClass()</title>
84             <programlisting role="php"><![CDATA[
85 Zend_Loader::loadClass('Container_Tree',
86     array(
87         '/home/production/mylib',
88         '/home/production/myapp'
89     )
91 ]]>
92             </programlisting>
93         </example>
95         <para>
96             Łańcuch znaków określający nazwę klasy jest konwertowany do
97             relatywnej ścieżki przez zamianę podkreślników na separatory ścieżek,
98             oraz przez dodanie na końcu nazwy rozszerzenia '.php'. W powyższym
99             przykładzie, nazwa 'Container_Tree' staje się 'Container\\Tree.php'.
100         </para>
102         <para>
103             Jeśli argument <code>$dirs</code> jest łańcuchem znaków lub tablicą,
104             metoda <code>Zend_Loader::loadClass()</code> przeszuka ścieżki w
105             kolejności ich zdefiniowania. Pierwszy pasujący plik zostanie
106             załadowany. Jeśli plik nie istnieje w ścieżkach ze zmiennej
107             <code>$dirs</code>, to przeszukiwane są ścieżki z dyrektywy
108             <code>include_path</code> środowiska PHP.
109         </para>
111         <para>
112             Jeśli plik nie zostanie znaleziony lub po załadowaniu pliku klasa
113             nie istnieje, metoda <code>Zend_Loader::loadClass()</code> wyrzuca
114             wyjątek <code>Zend_Exception</code>.
115         </para>
117         <para>
118             Do ładowania używana jest metoda <code>Zend_Loader::loadFile()</code>,
119             więc nazwa klasy może zawierać jedynie znaki alfanumeryczne,
120             myślniki ("-"), podkreślniki ("_"), oraz kropki (".").
121         </para>
123     </sect2>
125     <sect2 id="zend.loader.load.isreadable">
127         <title>Sprawdzanie czy plik jest dostępny do odczytu</title>
129         <para>
130             Statyczna metoda <code>Zend_Loader::isReadable($pathname)</code>
131             zwraca <code>TRUE</code> jeśli plik w określonej ścieżce istnieje
132             i jest dostępny do odczytu, w przeciwnym wypadku zwracana jest
133             wartość <code>FALSE</code>.
134         </para>
136         <example id="zend.loader.load.isreadable.example">
137             <title>Przykład użycia metody isReadable()</title>
138             <programlisting role="php"><![CDATA[
139 if (Zend_Loader::isReadable($filename)) {
140     // zrób coś z $filename
143             </programlisting>
144         </example>
146         <para>
147             Argument <code>$filename</code> określa nazwę pliku do sprawdzenia.
148             Może on zawierać informacje o ścieżce. Ta metoda używa funkcji PHP
149             <ulink url="http://php.net/is_readable"><code>is_readable()</code></ulink>.
150             Funkcja PHP nie sprawdza ścieżek z dyrektywy <code>include_path</code>,
151             a metoda <code>Zend_Loader::isReadable()</code> sprawdza.
152         </para>
154     </sect2>
156     <sect2 id="zend.loader.load.autoload">
158         <title>Użycie Autoloadera</title>
160         <para>
161             Klasa <code>Zend_Loader</code> zawiera metodę, którą możesz zarejestrować jako
162             autoloader PHP SPL. Tą metodą jest <code>Zend_Loader::autoload()</code>.
163             Dla wygody klasa <code>Zend_Loader</code> posiada metodę
164             <code>registerAutoload()</code> rejestrującą swoją własną metodę
165             <code>autoload()</code>. Jeśli rozszerzenie <code>spl_autoload</code>
166             nie jest zainstalowane w środowisku PHP, to metoda
167             <code>registerAutoload()</code> wyrzuca wyjątek <code>Zend_Exception</code>.
169         </para>
171         <example id="zend.loader.load.autoload.example-extended">
172             <title>Przykład zarejestrowania metody autoloadera</title>
173             <para>
174                 Z powodu semantyki referencji do statycznych funkcji w PHP,
175                 musisz zaimplementować kod zarówno dla metody <code>loadClass()</code>
176                 jak i dla metody <code>autoload()</code>, a metoda <code>autoload()</code>
177                 musi wywołać metodę <code>self::loadClass()</code>.
178                 Jeśli twoja metoda <code>autoload()</code> odnosi się do klasy
179                 rodzica i wywołuje metodę <code>self::loadClass()</code>, wtedy
180                 wywołuje metodę o tej nazwie pochodzącą z klasy rodzica, a nie
181                 z klasy rozszerzonej.
182             </para>
183             <programlisting role="php"><![CDATA[
184 Zend_Loader::registerAutoload();
186             </programlisting>
187         </example>
189         <para>
190             Po zarejestrowaniu metody autoload z Zend Framework, możesz
191             odwoływać się do klas Zend Framework bez konieczności ładowania
192             każdej z nich z osobna. Metoda <code>autoload()</code> używa metody
193             <code>Zend_Loader::loadClass()</code> automatycznie gdy odwołujesz
194             się do klasy.
195         </para>
197         <para>
198             Jeśli rozszerzyłeś klasę <code>Zend_Loader</code>, możesz przekazać opcjonalny
199             argument do metody <code>registerAutoload()</code>, aby określić
200             klasę, której metoda <code>autoload()</code> ma zostać zarejestrowana.
201         </para>
203         <example id="zend.loader.load.autoload.example">
204             <title>Przykład rejestrowania metody autoloadera z rozszerzonej
205                 klasy</title>
206             <programlisting role="php"><![CDATA[
207 class My_Loader extends Zend_Loader
209     public static function loadClass($class, $dirs = null)
210     {
211         parent::loadClass($class, $dirs);
212     }
214     public static function autoload($class)
215     {
216         try {
217             self::loadClass($class);
218             return $class;
219         } catch (Exception $e) {
220             return false;
221         }
222     }
225 Zend_Loader::registerAutoload('My_Loader');
227             </programlisting>
228         </example>
230         <para>
231             Możesz usunąć metodą autoloadera. Metoda
232             <code>registerAutoload()</code> przyjmuje opcjonalny drugi argument,
233             ktorego wartością domyślna jest <code>true</code>. Jeśli ten argument
234             ma wartość <code>false</code>, metoda autoloadera zostanie
235             wyrejestrowana ze stosu autoloaderów SPL.
236         </para>
238     </sect2>
240 </sect1>
241 <!--
242 vim:se ts=4 sw=4 et: