Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
7617a233
Commit
7617a233
authored
Jul 02, 2014
by
东方孤思子(Paris·QianSen)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
translated concept-autoloading.md [skip ci]
parent
bda225f2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
45 deletions
+25
-45
concept-autoloading.md
docs/guide-zh-CN/concept-autoloading.md
+25
-45
No files found.
docs/guide-zh-CN/concept-autoloading.md
View file @
7617a233
类自动加载(Autoloading)
类自动加载(Autoloading)
=================
=================
Yii relies on the
[
class autoloading mechanism
](
http://www.php.net/manual/en/language.oop5.autoload.php
)
Yii 依靠
[
类自动加载机制(http://www.php.net/manual/en/language.oop5.autoload.php)来定位和包含所需的类文件。它提供一个高性能且完美支持[PSR-4 标准
](
https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md
)
(
[
中文汉化
](
https://github.com/hfcorriez/fig-standards/blob/zh_CN/%E6%8E%A5%E5%8F%97/PSR-4-autoloader.md
)
)的自动加载器。该自动加载器会在包含
`Yii.php`
文件时安装好。
to locate and include required class files. It provides a high-performance class autoloader that is compliant to the
[
PSR-4 标准
](
https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md
)
.
The autoloader is installed when you include the
`Yii.php`
file.
> Note: For simplicity of description, in this section we will only talk about autoloading of classes. However, keep in
> 注意:为了简化叙述,本篇文档中我们只会提及类的自动加载。不过,要记得文中的描述同样也适用于接口和Trait(特质)的自动加载哦。
mind that the content we are describing here applies to autoloading of interfaces and traits as well.
使用 Yii 自动加载器 <a name="using-yii-autoloader"></a>
使用 Yii 自动加载器 <a name="using-yii-autoloader"></a>
------------------------
------------------------
To make use of the Yii class autoloader, you should follow two simple rules when creating and naming your classes:
要使用 Yii 的类自动加载器,你需要在创建和命名尼德类的时候遵循两个简单的规则:
*
Each class must be under some namespace (e.g.
`foo\bar\MyClass`
).
*
每个类都必须置于命名空间之下 (比如
`foo\bar\MyClass`
)。
*
Each class must be saved in an individual file whose path is determined by the following algorithm:
*
每个类都必须保存为单独文件,且其完整路径能用以下算法取得:
```
php
```
php
// $className
is a fully qualified class name with the leading backslash
// $className
是一个开头包含反斜杠的完整类名(译者注:请自行谷歌:fully qualified class name)
$classFile
=
Yii
::
getAlias
(
'@'
.
str_replace
(
'\\'
,
'/'
,
$className
)
.
'.php'
);
$classFile
=
Yii
::
getAlias
(
'@'
.
str_replace
(
'\\'
,
'/'
,
$className
)
.
'.php'
);
```
```
For example, if a class name is
`foo\bar\MyClass`
, the
[
alias
](
concept-aliases.md
)
for the corresponding class file path
举例来说,若某个类名为
`foo\bar\MyClass`
,对应类的文件路径
[
别名
](
concept-aliases.md
)
会是
would be
`@foo/bar/MyClass.php`
. In order for this alias to be able to be resolved into a file path,
`@foo/bar/MyClass.php`
。为了让该别名能被正确解析为文件路径,
`@foo`
或
`@foo/bar`
either
`@foo`
or
`@foo/bar`
must be a
[
root alias
](
concept-aliases.md#defining-aliases
)
.
中的一个必须是
[
根别名
](
concept-aliases.md#defining-aliases
)
。
When you are using the
[
Basic Application Template
](
start-basic.md
)
, you may put your classes under the top-level
当我们使用
[
基本应用模版
](
start-basic.md
)
时,你可以把你的类放置在顶级命名空间
`app`
下,这样它们就可以被 Yii
namespace
`app`
so that they can be autoloaded by Yii without the need of defining a new alias. This is because
自动加载,而无需定义一个新的别名。这是因为
`@app`
本身是一个
[
预定义别名
](
concept-aliases.md#predefined-aliases
)
,且类似于
`app\components\MyClass`
这样的类名,基于我们刚才所提到的算法,可以正确解析出
`AppBasePath/components/MyClass.php`
路径。
`@app`
is a
[
predefined alias
](
concept-aliases.md#predefined-aliases
)
, and a class name like
`app\components\MyClass`
can be resolved into the class file
`AppBasePath/components/MyClass.php`
, according to the algorithm we just described.
In the
[
Advanced Application Template
](
tutorial-advanced-app.md
)
, each tier has its own root alias. For example,
在
[
高级应用模版
](
tutorial-advanced-app.md
)
里,每一逻辑层级会使用他自己的根别名。比如,在前端层,会使用
`@frontend`
the front-end tier has a root alias
`@frontend`
while the back-end tier
`@backend`
. As a result, you may
而后端层会使用
`@backend`
。因此,你可以把前端的类放在
`frontend`
命名空间,而后端的类放在
`backend`
。 这样这些类就可以被 Yii 自动加载了。
put the front-end classes under the namespace
`frontend`
while the back-end classes under
`backend`
. This will
allow these classes to be autoloaded by the Yii autoloader.
类映射表(Class Map) <a name="class-map"></a>
类映射表(Class Map) <a name="class-map"></a>
---------
---------
The Yii class autoloader supports the
*class map*
feature which maps class names to the corresponding class file paths.
Yii 类自动加载器支持
**类映射表**
功能,该功能会建立一个从类的名字到类文件路径的映射。当自动加载器加载一个文件时,他首先检查映射表里有没有该类。如果有,对应的文件路径就直接加载了,省掉了进一步的检查。它可以让类的自动加载变得炒鸡快!事实上,所有的 Yii 核心类都是这样加载的。
When the autoloader is loading a class, it will first check if the class is found in the map. If so, the corresponding
file path will be included directly without further check. This makes class autoloading super fast. In fact,
all core Yii classes are being autoloaded this way.
You may add a class to the class map
`Yii::$classMap`
as follows,
你可以用
`Yii::$classMap`
方法向映射表中添加类,
```
php
```
php
Yii
::
$classMap
[
'foo\bar\MyClass'
]
=
'path/to/MyClass.php'
;
Yii
::
$classMap
[
'foo\bar\MyClass'
]
=
'path/to/MyClass.php'
;
```
```
[
Aliases
](
concept-aliases.md
)
can be used to specify class file paths. You should set the class map in the
[
别名
](
concept-aliases.md
)
可以被用于指定类文件的路径。你应该在
[
引导启动
](
runtime-bootstrapping.md
)
的过程中设置类映射表,这样映射表就可以在你使用具体类之前就准备好。
[
bootstrapping
](
runtime-bootstrapping.md
)
process so that the map is ready before your classes are used.
用其他自动加载器 <a name="using-other-autoloaders"></a>
用其他自动加载器 <a name="using-other-autoloaders"></a>
-----------------------
-----------------------
Because Yii embraces Composer as a package dependency manager, it is recommended that you also install
因为 Yii 完全支持 Composer 成为一个依赖包管理器,所以推荐你也同时安装 Composer 的自动加载器,如果你用了一些自带自动加载器的第三方类库,你应该也安装下它们。
the Composer autoloader. If you are using some 3rd-party libraries that have their autoloaders, you should
also install them.
When you are using the Yii autoloader together with other autoloaders, you should include the
`Yii.php`
file
在你同时使用其他自动加载器和 Yii 自动加载器的时候,你应该在其他自动加载器安装成功
**之后**
,再包含
`Yii.php`
*after*
all other autoloaders are installed. This will make the Yii autoloader to be the first one responding to
文件。这将使 Yii 成为第一个响应任何类自动加载请求的自动加载器。举例来说,以下代码提取自
[
基本应用模版
](
start-basic.md
)
的
[
入口脚本
](
structure-entry-scripts.md
)
。第一行安装了 Composer 的自动加载器,第二行才是 Yii 的自动加载器:
any class autoloading request. For example, the following code is extracted from
the
[
entry script
](
structure-entry-scripts.md
)
of the
[
Basic Application Template
](
start-basic.md
)
. The first
line installs the Composer autoloader, while the second line installs the Yii autoloader.
```
php
```
php
require
(
__DIR__
.
'/../vendor/autoload.php'
);
require
(
__DIR__
.
'/../vendor/autoload.php'
);
require
(
__DIR__
.
'/../vendor/yiisoft/yii2/Yii.php'
);
require
(
__DIR__
.
'/../vendor/yiisoft/yii2/Yii.php'
);
```
```
You may use the Composer autoloader alone without the Yii autoloader. However, by doing so, the performance
你也可以只使用 Composer 的自动加载,而不用 Yii 的自动加载。不过这样做的话,类的加载效率会下降,且你必须遵循 Composer 所设定的规则,从而让你的类满足可以被自动加载的要求。
of your class autoloading may be degraded, and you must follow the rules set by Composer in order for your classes
to be autoloadable.
> Info: If you do not want to use the Yii autoloader, you must create your own version of the `Yii.php` file
> 补充:若你不想要使用 Yii 的自动加载器,你必须创建一个你自己版本的 `Yii.php` 文件,并把它包含进你的[入口脚本](structure-entry-scripts.md)里。
and include it in your
[
entry script
](
structure-entry-scripts.md
)
.
自动加载扩展类 <a name="autoloading-extension-classes"></a>
自动加载扩展类 <a name="autoloading-extension-classes"></a>
-----------------------------
-----------------------------
The Yii autoloader is capable of autoloading
[
extension
](
structure-extensions.md
)
classes. The sole requirement
Yii 自动加载器支持自动加载
[
扩展
](
structure-extensions.md
)
的类。唯一的要求是它需要在
`composer.json`
is that an extension specifies the
`autoload`
section correctly in its
`composer.json`
file. Please refer to the
文件里正确地定义
`autoload`
部分。请参考
[
Composer 文档(英文)
](
https://getcomposer.org/doc/04-schema.md#autoload
)
(
[
中文汉化
](
https://github.com/5-say/composer-doc-cn/blob/master/cn-introduction/04-schema.md#autoload
)
),来了解如何正确描述
`autoload`
的更多细节。
[
Composer documentation
](
https://getcomposer.org/doc/04-schema.md#autoload
)
for more details about specifying
`autoload`
.
In case you do not use the Yii autoloader, the Composer autoloader can still autoload extension classes for you.
在你不使用 Yii 的自动加载器时,Composer 的自动加载器仍然可以帮你自动加载扩展内的类。
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment