mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 19:16:54 +01:00
124 lines
8.6 KiB
Plaintext
124 lines
8.6 KiB
Plaintext
Псевдоним пути и пространство имен
|
||
==================================
|
||
|
||
Псевдонимы пути широко используются в Yii.
|
||
Псевдоним ассоциируется с директорией или путем к файлу.
|
||
При его указании используется точечный синтаксис, схожий с широко используемым форматом пространств
|
||
имен:
|
||
|
||
~~~
|
||
RootAlias.path.to.target
|
||
~~~
|
||
|
||
где `RootAlias` — псевдоним существующей директории.
|
||
|
||
|
||
При помощи [YiiBase::getPathOfAlias()] мы можем преобразовать псевдоним
|
||
в соответствующий ему путь. К примеру, `system.web.CController` будет
|
||
преобразован в `yii/framework/web/CController`.
|
||
|
||
Также мы можем использовать [YiiBase::setPathOfAlias()] для определения новых
|
||
корневых псевдонимов.
|
||
|
||
|
||
Корневой псевдоним
|
||
------------------
|
||
|
||
Для удобства, следующие системные псевдонимы уже предопределены:
|
||
|
||
- `system`: соответствует директории фреймворка;
|
||
- `zii`: соответствует директории [библиотеки расширений Zii](/doc/guide/extension.use#zii-extensions);
|
||
- `application`: соответствует [базовой директории приложения](/doc/guide/basics.application#application-base-directory);
|
||
- `webroot`: соответствует директории, содержащей [входной скрипт](/doc/guide/basics.entry). Этот псевдоним доступен, начиная с версии 1.0.3.
|
||
- `ext`: соответствует директории, содержащей все сторонние [расширения](/doc/guide/extension.overview). Этот псевдоним доступен, начиная с версии 1.0.8.
|
||
|
||
Кроме того, в случае, если приложение использует [модули](/doc/guide/basics.module), системный псевдоним предопределяется для каждого идентификатора модуля и соответствует пути к этому модулю. Эта возможность доступна, начиная с версии 1.0.3.
|
||
|
||
Импорт классов
|
||
--------------
|
||
|
||
Используя псевдонимы, очень удобно импортировать описания классов.
|
||
К примеру, для подключения класса [CController] можно вызвать:
|
||
|
||
~~~
|
||
[php]
|
||
Yii::import('system.web.CController');
|
||
~~~
|
||
|
||
Использование метода [import|YiiBase::import] более эффективно, чем `include` и `require`, поскольку
|
||
описание импортируемого класса не будет включено до первого обращения (реализовано через механизм
|
||
автозагрузки классов PHP). Импорт
|
||
одного и того же пространства имён также происходит намного быстрее, чем при использовании `include_once` и
|
||
`require_once`.
|
||
|
||
> Tip|Подсказка: Если мы ссылаемся на класс фреймворка, то нет необходимости импортировать или включать их.
|
||
Все системные классы Yii уже импортированы заранее.
|
||
|
||
### Использование таблицы классов
|
||
|
||
Начиная с версии 1.1.5, Yii позволяет предварительно импортировать пользовательские
|
||
классы через тот же механизм, что используется для классов ядра. Такие классы
|
||
могут использоваться где угодно в приложении без необходимости их предварительного
|
||
импорта или подключения. Данная возможность отлично подходит для фреймворка или библиотеки,
|
||
использующих Yii.
|
||
|
||
Для импорта набора классов, выполните следующий код до вызова [CWebApplication::run()]:
|
||
|
||
~~~
|
||
[php]
|
||
Yii::$classMap=array(
|
||
'ClassName1' => 'path/to/ClassName1.php',
|
||
'ClassName2' => 'path/to/ClassName2.php',
|
||
......
|
||
);
|
||
~~~
|
||
|
||
|
||
Импорт директорий
|
||
-----------------
|
||
|
||
Можно использовать следующий синтаксис для того, чтобы импортировать целую директорию, а файлы классов,
|
||
содержащиеся в директории, будут подключены автоматически при необходимости.
|
||
|
||
~~~
|
||
[php]
|
||
Yii::import('system.web.*');
|
||
~~~
|
||
|
||
Помимо [import|YiiBase::import], псевдонимы также используются во многих других местах, где есть ссылки на классы.
|
||
Например, псевдоним может быть передан методу [Yii::createComponent()] для создания экземпляра соответствующего
|
||
класса, даже если этот класс не был предварительно включен.
|
||
|
||
Пространство имён
|
||
-----------------
|
||
|
||
Пространства имен служат для логической группировки
|
||
имен классов, чтобы их можно было отличить от других, даже если их имена совпадают.
|
||
Не путайте псевдоним пути с пространством имён. Псевдоним пути — всего лишь
|
||
удобный способ именования файлов и директорий. К пространствам имён он не имеет никакого
|
||
отношения.
|
||
|
||
> Tip|Подсказка: Так как версии PHP до 5.3.0 не поддерживают пространства имен, вы не можете создать
|
||
экземпляры классов с одинаковыми именами, но различными описаниями. По этой причине все названия
|
||
классов Yii-фреймворка имеют префикс 'C' (означающий 'class'), чтобы их можно было отличить от
|
||
пользовательских классов. Для пользовательских классов рекомендуется использовать другие префиксы,
|
||
сохранив префикс 'C' зарезервированным для Yii-фреймворка.
|
||
|
||
Классы в пространствах имён
|
||
---------------------------
|
||
|
||
Класс в пространстве имён — любой класс, описанный в неглобальном пространстве имён.
|
||
К примеру, класс `application\components\GoogleMap` описан в пространстве имён
|
||
`application\components`. Использование пространств имён требует PHP 5.3.0 и выше.
|
||
|
||
Начиная с версии 1.1.5 стало возможным использование класс из пространства имён без его
|
||
предварительного подключения. К примеру, мы можем создать новый экземпляр
|
||
`application\components\GoogleMap` без явного подключения соответствующего файла.
|
||
Это реализуется при помощи улучшенного загрузчика классов Yii.
|
||
|
||
Для того, чтобы автоматически подгрузить класс из пространства имён, пространство имён должно быть
|
||
названо в том же стиле, что и псевдонимы пути. Например, класс `application\components\GoogleMap`
|
||
должен храниться в файле, которому соответствует псевдоним `application.components.GoogleMap`.
|
||
|
||
|
||
<div class="revision">$Id: basics.namespace.txt 2630 2010-11-08 21:13:33Z qiang.xue $</div> |