Zend_Loader.xml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <sect1 id="zend.loader.load">
  2. <title>Динамическая загрузка файлов и классов<!--Loading Files and Classes Dynamically--></title>
  3. <para>
  4. Класс Zend_Loader включает в себя методы, помогающие производить
  5. динамическую загрузку файлов.
  6. <!--
  7. The Zend_Loader class includes methods to help you load files dynamically.
  8. -->
  9. </para>
  10. <tip>
  11. <title>Zend_Loader vs. require_once()</title>
  12. <para>
  13. Методы Zend_Loader лучше всего использовать, если имя файла,
  14. которого нужно загрузить, является переменным - например, основано
  15. на вводе пользователя или аргументе метода. Если вы загружаете файл
  16. или класс, чье имя является константой, то использование Zend_Loader
  17. не дает каких-либо преимуществ по сравнению использованием обычных
  18. функций PHP, таких, как
  19. <ulink url="http://php.net/require_once"><code>require_once()</code></ulink>.
  20. <!--
  21. The Zend_Loader methods are best used if the filename you need to
  22. load is variable. For example, if it is based on a parameter from
  23. user input or method argument. If you are loading a file or a
  24. class whose name is constant, there is no benefit to using
  25. Zend_Loader over using traditional PHP functions such as
  26. <ulink url="http://php.net/require_once"><code>require_once()</code></ulink>.
  27. -->
  28. </para>
  29. </tip>
  30. <sect2 id="zend.loader.load.file">
  31. <title>Загрузка файлов<!--Loading Files--></title>
  32. <para>
  33. Статический метод <code>Zend_Loader::loadFile()</code> загружает
  34. файл PHP. Загружаемый файл должен содержать код PHP. Метод является
  35. оберткой к PHP-функции <ulink url="http://php.net/include"><code>include()</code></ulink>.
  36. Этот метод бросает исключение <code>Zend_Exception</code> в случае
  37. неуспеха - например, если требуемый файл не существует.
  38. <!--
  39. The static method <code>Zend_Loader::loadFile()</code> loads a PHP
  40. file. The file loaded may contain any PHP code.
  41. The method is a wrapper for the PHP function
  42. <ulink url="http://php.net/include"><code>include()</code></ulink>.
  43. This method throws <code>Zend_Exception</code> on failure, for example
  44. if the specified file does not exist.
  45. -->
  46. </para>
  47. <example id="zend.loader.load.file.example">
  48. <title>Пример использования метода loadFile()<!--Example of loadFile() method--></title>
  49. <programlisting role="php"><![CDATA[<?php
  50. Zend_Loader::loadFile($filename, $dirs=null, $once=false)
  51. ?>]]></programlisting>
  52. </example>
  53. <para>
  54. Аргумент <code>$filename</code> задает имя файла для загрузки, оно
  55. не должно содержать пути к файлу. В целях безопасности производится
  56. проверка <code>$filename</code>. <code>$filename</code> должен
  57. содержать только алфавитно-цифровые символы, тире ("-"), знак
  58. подчеркивания ("_") и точку ("."). На аргумент <code>$dirs</code>
  59. эти ограничения не распространяются.
  60. <!--
  61. The <code>$filename</code> argument specifies the filename to load,
  62. which must not contain any path information.
  63. A security check is performed on <code>$filename</code>.
  64. The <code>$filename</code> may only contain alphanumeric characters,
  65. dashes ("-"), underscores ("_"), or periods (".").
  66. No such restriction is placed on the <code>$dirs</code> argument.
  67. -->
  68. </para>
  69. <para>
  70. <code>$dirs</code> задает директории для поиска файла. Если он равен
  71. <code>NULL</code>, то для поиска используется только
  72. <code>include_path</code>. Если он является строкой или массивом, то
  73. файл сначала ищется в данной директории (директориях) и затем в
  74. <code>include_path</code>.
  75. <!--
  76. The <code>$dirs</code> argument specifies directories to search for
  77. the file. If <code>NULL</code>, only the <code>include_path</code>
  78. is searched. If a string or an array, the directory or directories
  79. specified will be searched, and then the <code>include_path</code>.
  80. -->
  81. </para>
  82. <para>
  83. Аргумент <code>$once</code> является значением булевого типа. Если
  84. равен <code>TRUE</code>, то <code>Zend_Loader::loadFile()</code> для
  85. загрузки файла использует PHP-функцию
  86. <ulink url="http://php.net/include"><code>include_once()</code></ulink>,
  87. иначе используется функция <ulink url="http://php.net/include_once"><code>include()</code></ulink>.
  88. <!--
  89. The <code>$once</code> argument is a boolean. If <code>TRUE</code>,
  90. <code>Zend_Loader::loadFile()</code> uses the PHP function
  91. <ulink url="http://php.net/include"><code>include_once()</code></ulink>
  92. for loading the file, otherwise the PHP function
  93. <ulink url="http://php.net/include_once"><code>include()</code></ulink>
  94. is used.
  95. -->
  96. </para>
  97. </sect2>
  98. <sect2 id="zend.loader.load.class">
  99. <title>Загрузка классов<!--Loading Classes--></title>
  100. <para>
  101. Статический метод <code>Zend_Loader::loadClass($class, $dirs)</code>
  102. загружает файл PHP и затем проверяет наличие требуемого класса.
  103. <!--
  104. The static method <code>Zend_Loader::loadClass($class, $dirs)</code>
  105. loads a PHP file and then checks for the existance of the class.
  106. -->
  107. </para>
  108. <example id="zend.loader.load.class.example">
  109. <title>Пример использования метода loadClass()<!--Example of loadClass() method--></title>
  110. <programlisting role="php"><![CDATA[<?php
  111. Zend_Loader::loadClass('Container_Tree',
  112. array(
  113. '/home/production/mylib',
  114. '/home/production/myapp'
  115. )
  116. );
  117. ?>]]></programlisting>
  118. </example>
  119. <para>
  120. Строка, задающая класс, преобразуется в относительный путь
  121. посредством замены знаков подчеркивания разделителями директорий и
  122. добавления расширения '.php' в конец. В примере выше
  123. 'Container_Tree' преобразуется в 'Container/Tree.php'.
  124. <!--
  125. The string specifying the class is converted to a relative path
  126. by substituting directory separates for underscores, and appending
  127. '.php'. In the example above, 'Container_Tree' becomes 'Container/Tree.php'.
  128. -->
  129. </para>
  130. <para>
  131. Если <code>$dirs</code> является строкой или массивом, то
  132. <code>Zend_Loader::loadClass()</code> ищет в директориях в
  133. том порядке, в котором они были определены. Загружается первый
  134. найденный файл. Если файл не найден в директориях
  135. <code>$dirs</code>, то производится поиск в include_path.
  136. <!--
  137. If <code>$dirs</code> is a string or an array,
  138. <code>Zend_Loader::loadClass()</code> searches the directories in
  139. the order supplied. The first matching file is loaded. If the file
  140. does not exist in the specified <code>$dirs</code>, then the
  141. include_path for the PHP environment is searched.
  142. -->
  143. </para>
  144. <para>
  145. Если файл не найден или класс не существует после загрузки, то
  146. <code>Zend_Loader::loadClass()</code> бросает
  147. исключениеZend_Exception.
  148. <!--
  149. If the file is not found or the class does not exist after the load,
  150. <code>Zend_Loader::loadClass()</code> throws a Zend_Exception.
  151. -->
  152. </para>
  153. <para>
  154. Для загрузки используется метод
  155. <code>Zend_Loader::loadFile()</code>, поэтому имя класса должно
  156. содержать только алфавитно-цпфровые символы, тире ('-'), знак
  157. подчеркивания ('_') и точку ('.').
  158. <!--
  159. <code>Zend_Loader::loadFile()</code> is used for loading, so the
  160. class name may only contain alphanumeric characters and the hyphen
  161. ('-'), underscore ('_'), and period ('.').
  162. -->
  163. </para>
  164. </sect2>
  165. <sect2 id="zend.loader.load.isreadable">
  166. <title>Проверка, является ли файл доступным для чтения<!--Testing if a File is Readable--></title>
  167. <para>
  168. Статический метод <code>Zend_Loader::isReadable($pathname)</code>
  169. возвращает <code>TRUE</code>, если по заданному пути существует файл
  170. и он доступен для чтения, иначе возвращается <code>FALSE</code>.
  171. <!--
  172. The static method <code>Zend_Loader::isReadable($pathname)</code>
  173. returns <code>TRUE</code> if a file at the specified pathname exists
  174. and is readable, FALSE otherwise.
  175. -->
  176. </para>
  177. <example id="zend.loader.load.isreadable.example">
  178. <title>Пример использования метода isReadable()<!--Example of isReadable() method--></title>
  179. <programlisting role="php"><![CDATA[<?php
  180. if (Zend_Loader::isReadable($filename)) {
  181. // делаем что-либо с файлом $filename
  182. }
  183. ?>]]></programlisting>
  184. </example>
  185. <para>
  186. Аргумент <code>$filename</code> задает имя файла для проверки. Он
  187. может содержать путь к файлу. Этот метод является оберкой к
  188. PHP-функции
  189. <ulink url="http://php.net/is_readable"><code>is_readable()</code></ulink>.
  190. Эта функция не производит поиск в <code>include_path</code>, в то
  191. время как метод <code>Zend_Loader::isReadable()</code> производит.
  192. <!--
  193. The <code>$filename</code> argument specifies the filename to
  194. check. This may contain path information.
  195. This method is a wrapper for the PHP function
  196. <ulink url="http://php.net/is_readable"><code>is_readable()</code></ulink>.
  197. The PHP function does not search the <code>include_path</code>,
  198. while <code>Zend_Loader::isReadable()</code> does.
  199. -->
  200. </para>
  201. </sect2>
  202. <sect2 id="zend.loader.load.autoload">
  203. <title>Использование автозагрузчика<!--Using the Autoloader--></title>
  204. <para>
  205. Класс Zend_Loader содержит метод, который вы можете регистрировать
  206. через автозагрузчик PHP SPL. <code>Zend_Loader::autoload()</code>
  207. является методом обратного вызова. Для удобства Zend_Loader
  208. предоставляет метод <code>registerAutoload()</code> для регистрации
  209. своего метода <code>autoload()</code>. Если в среде PHP отсутствует
  210. расширение <code>spl_autoload</code>, то метод
  211. <code>registerAutoload()</code> бросает исключение Zend_Exception.
  212. <!--
  213. The Zend_Loader class contains a method you can register with the
  214. PHP SPL autoloader. <code>Zend_Loader::autoload()</code> is the
  215. callback method. As a convenience, Zend_Loader provides the
  216. <code>registerAutoload()</code> function register its
  217. <code>autoload()</code> method. If the <code>spl_autoload</code>
  218. extension is not present in your PHP environment, then
  219. <code>registerAutoload()</code> method throws a Zend_Exception.
  220. -->
  221. </para>
  222. <example id="zend.loader.load.autoload.example">
  223. <title>Пример регистрации метода обратного вызова автозагрузки<!--Example of registering the autoloader callback method--></title>
  224. <programlisting role="php"><![CDATA[<?php
  225. Zend_Loader::registerAutoload();
  226. ?>]]></programlisting>
  227. </example>
  228. <para>
  229. После регистрации метода обратного вызова автозагрузки вы можете
  230. ссылаться на классы из Zend Framework без их явной загрузки.
  231. Метод <code>autoload()</code> автоматически запускает метод
  232. <code>Zend_Loader::loadClass()</code>, когда вы ссылаетесь на класс.
  233. <!--
  234. After registering the Zend Framework autoload callback, you can
  235. reference classes from Zend Framework without having to load
  236. them explicitly. The <code>autoload()</code> method uses
  237. <code>Zend_Loader::loadClass()</code> automatically when you
  238. reference a class.
  239. -->
  240. </para>
  241. <para>
  242. Если вы расширили класс Zend_Loader, то можете передать опциональный
  243. аргумент методу <code>registerAutoload()</code>, чтобы определить
  244. класс, из которого следует регистрировать метод
  245. <code>autoload()</code>.
  246. <!--
  247. If you have extended the Zend_Loader class, you can give an
  248. optional argument to <code>registerAutoload()</code>, to specify
  249. the class from which to register an <code>autoload()</code> method.
  250. -->
  251. </para>
  252. <example id="zend.loader.load.autoload.example-extended">
  253. <title>Пример регистрации метода автозагрузки из расширенного класса<!--Example of registering the autoload callback method from an extended class--></title>
  254. <programlisting role="php"><![CDATA[<?php
  255. class My_Loader extends Zend_Loader
  256. {
  257. // реализация собственного функционала
  258. }
  259. Zend_Loader::registerAutoload('My_Loader');
  260. ?>]]></programlisting>
  261. </example>
  262. </sect2>
  263. </sect1>
  264. <!--
  265. vim:se ts=4 sw=4 et:
  266. -->