|
|
|
@ -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. |
|
|
|
|