diff --git a/docs/api/base/Component.md b/docs/api/base/Component.md index b5a07fd..01ef462 100644 --- a/docs/api/base/Component.md +++ b/docs/api/base/Component.md @@ -1,3 +1,5 @@ +Component is the base class that implements the *property*, *event* and *behavior* features. + Component provides the *event* and *behavior* features, in addition to the *property* feature which is implemented in its parent class [[Object]]. diff --git a/docs/api/base/Object.md b/docs/api/base/Object.md index a2cea6c..1b9fca0 100644 --- a/docs/api/base/Object.md +++ b/docs/api/base/Object.md @@ -1,3 +1,5 @@ +Object is the base class that implements the *property* feature. + A property is defined by a getter method (e.g. `getLabel`), and/or a setter method (e.g. `setLabel`). For example, the following getter and setter methods define a property named `label`: @@ -30,4 +32,30 @@ $object->label = 'abc'; If a property has only a getter method and has no setter method, it is considered as *read-only*. In this case, trying to modify the property value will cause an exception. -One can call [[hasProperty]], [[canGetProperty]] and/or [[canSetProperty]] to check the existence of a property. +One can call [[hasProperty()]], [[canGetProperty()]] and/or [[canSetProperty()]] to check the existence of a property. + + +Besides the property feature, Object also introduces an important object initialization life cycle. In particular, +creating an new instance of Object or its derived class will involve the following life cycles sequentially: + +1. the class constructor is invoked; +2. object properties are initialized according to the given configuration; +3. the `init()` method is invoked. + +In the above, both Step 2 and 3 occur at the end of the class constructor. It is recommended that +you perform object initialization in the `init()` method because at that stage, the object configuration +is already applied. + +In order to ensure the above life cycles, if a child class of Object needs to override the constructor, +it should be done like the following: + +~~~ +public function __construct($param1, $param2, ..., $config = array()) +{ + ... + parent::__construct($config); +} +~~~ + +That is, a `$config` parameter (defaults to `array()`) should be declared as the last parameter +of the constructor, and the parent implementation should be called at the end of the constructor. diff --git a/framework/base/Component.php b/framework/base/Component.php index 5a76ee3..80259e7 100644 --- a/framework/base/Component.php +++ b/framework/base/Component.php @@ -10,12 +10,7 @@ namespace yii\base; use Yii; /** - * Component is the base class that provides the *property*, *event* and *behavior* features. - * * @include @yii/base/Component.md - * - * @property Behavior[] behaviors list of behaviors currently attached to this component - * * @author Qiang Xue * @since 2.0 */ diff --git a/framework/base/Object.php b/framework/base/Object.php index 3bd8378..a547990 100644 --- a/framework/base/Object.php +++ b/framework/base/Object.php @@ -8,10 +8,7 @@ namespace yii\base; /** - * Object is the base class that provides the *property* feature. - * * @include @yii/base/Object.md - * * @author Qiang Xue * @since 2.0 */