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
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Rotua Panjaitan
yii2
Commits
f5045fc5
Commit
f5045fc5
authored
Jul 06, 2014
by
Yang Liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13 from AbrahamGreyson/master
Guide-zh-CN/concept-components.md proofread.Adjust line breaking; modifi...
parents
ddfad3f4
6ffc4bba
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
18 deletions
+15
-18
concept-components.md
docs/guide-zh-CN/concept-components.md
+15
-18
No files found.
docs/guide-zh-CN/concept-components.md
View file @
f5045fc5
组件(Component)
==========
组件是 Yii 应用的主要基石
之一。组件是
[
[yii\base\Component
]
] 类或其子类的实例。三个它能提供,其他类不能
的主要功能有:
组件是 Yii 应用的主要基石
。是
[
[yii\base\Component
]
] 类或其子类的实例。三个用以区分它和其它类
的主要功能有:
*
[
属性(Property)
](
concept-properties.md
)
*
[
事件(Event)
](
concept-events.md
)
*
[
行为(Behavior)
](
concept-behaviors.md
)
或单独使用,或彼此配合,总之这些功能的应用让 Yii 的类变得更加灵活和易用。就拿一个叫
[
[yii\jui\DatePicker|日期选择器
]
]
的小部件来举例吧,这是个方便你在
[
视图
](
structure-view.md
)
中生成一个交互式日期选择器的 UI 组件,你们自己看这样的调用方式是不是很屌:
或单独使用,或彼此配合,这些功能的应用让 Yii 的类变得更加灵活和易用。以小部件
[
[yii\jui\DatePicker|日期选择器
]
] 来举例,这是个方便你在
[
视图
](
structure-view.md
)
中生成一个交互式日期选择器的 UI 组件:
```
php
use
yii\jui\DatePicker
;
...
...
@@ -22,17 +21,15 @@ echo DatePicker::widget([
]);
```
正因为这个小部件继承自
[
[yii\base\Component
]
],所以它的各项属性改写起来就会很容易……
这个小部件继承自
[
[yii\base\Component
]
],它的各项属性改写起来会很容易。
虽然组件非常屌爆,但是他们比常规的对象(Object)要稍微重量级一点点,因为他们要使用额外的内存和 CPU 时间来支持这些功能,尤其是
[
事件
](
concept-events.md
)
和
[
行为
](
concept-behaviors.md
)
这俩货。如果你的组件不需要这两项功能,你可以考虑继承
[
[yii\base\Object
]
]
而不是
[
[yii\base\Component
]
]。这样一来,你的组件就可以像普通 PHP 对象一样高效了。同时,它还依旧支持
[
属性(Property)
](
concept-properties.md
)
功能!
正是因为组件功能的强大,他们比常规的对象(Object)稍微重量级一点,因为他们要使用额外的内存和 CPU 时间来处理
[
事件
](
concept-events.md
)
和
[
行为
](
concept-behaviors.md
)
。如果你不需要这两项功能,可以继承
[
[yii\base\Object
]
] 而不是
[
[yii\base\Component
]
]。这样组件可以像普通 PHP 对象一样高效,同时还支持
[
属性(Property)
](
concept-properties.md
)
功能。
当
你继承
[
[yii\base\Component
]
] 或
[
[yii\base\Object
]
] 时,我们
推荐你使用如下的编码风格:
当
继承
[
[yii\base\Component
]
] 或
[
[yii\base\Object
]
] 时,
推荐你使用如下的编码风格:
-
若你需要重写构造
器(Constructor),指定一个
`$config`
参数,作为构造器的
*最后一个*
参数,然后把它传递给父类的构造器。(译者注:
`parent::__construct($config = [])`
,用于把属性配置信息传递回父类。可选参数放最后是 PSR 的规范之一)
-
永远在你重写的构造
器
*结尾处*
调用一下父类的构造器
。
-
如果你重写了
[
[yii\base\Object::init()
]
] 方法,请确保你在
`init`
方法的
*开头处*
调用了父类的
`init`
方法。
-
若你需要重写构造
方法(Constructor),传入
`$config`
作为构造器方法
**最后一个**
参数,然后把它传递给父类的构造方法。
-
永远在你重写的构造
方法
**结尾处**
调用一下父类的构造方法
。
-
如果你重写了
[
[yii\base\Object::init()
]
] 方法,请确保你在
`init`
方法的
**开头处**
调用了父类的
`init`
方法。
例子如下:
...
...
@@ -62,7 +59,7 @@ class MyClass extends Object
}
```
另外,为了让
你的组件可以在创建实例时
[
能被正确配置
](
concept-configurations.md
)
,请遵照以下操作流程。举例
:
另外,为了让
组件可以在创建实例时
[
能被正确配置
](
concept-configurations.md
)
,请遵照以下操作流程
:
```
php
$component
=
new
MyClass
(
1
,
2
,
[
'prop1'
=>
3
,
'prop2'
=>
4
]);
...
...
@@ -74,14 +71,14 @@ $component = \Yii::createObject([
],
[
1
,
2
]);
```
> 补充:
虽然调用 [[Yii::createObject()]] 的方法看起来更加复杂,但是这主要是因为它更加灵活强大,这货是基于高大上的[依赖注入容器](concept-di-container.md)的一种实现
。
> 补充:
尽管调用 [[Yii::createObject()]] 的方法看起来更加复杂,但这主要因为它更加灵活强大,它是基于[依赖注入容器](concept-di-container.md)实现的
。
每个
[
[yii\base\Object
]
] 类的生命周期是这样度过的
:
[
[yii\base\Object
]
] 类执行时的生命周期如下
:
1.
构造
器
内的预初始化过程。你可以在这儿给各属性设置缺省值。
2.
通过
`$config`
配置对象。配置的过程可能会覆盖掉先前在构造
器
内设置的默认值。
3.
在
[
[yii\base\Object::init()|init()
]
] 方法内进行初始化
的收尾工作。你可以通过重写此方法,进行一些良品检验呀,属性的标准化呀,之类的事情
。
1.
构造
方法
内的预初始化过程。你可以在这儿给各属性设置缺省值。
2.
通过
`$config`
配置对象。配置的过程可能会覆盖掉先前在构造
方法
内设置的默认值。
3.
在
[
[yii\base\Object::init()|init()
]
] 方法内进行初始化
后的收尾工作。你可以通过重写此方法,进行一些良品检验,属性的初始化之类的工作
。
4.
对象方法调用。
前三步都是在对象的构造
器内发生的。这意味着一旦你获得了一个对象实例,那么它已经初始化为了一个妥妥的状态,放心大胆的用吧
。
前三步都是在对象的构造
方法内发生的。这意味着一旦你获得了一个对象实例,那么它就已经初始化就绪可供使用
。
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