Class yii\base\BaseObject
BaseObject 是實作屬性功能的基础類別。
屬性由 getter 方法 (例如 getLabel
) 和/或 setter 方法 (例如 setLabel
) 定義。例如,以下 getter 和 setter 方法定義了一個名為 label
的屬性
private $_label;
public function getLabel()
{
return $this->_label;
}
public function setLabel($value)
{
$this->_label = $value;
}
屬性名稱是大小寫不敏感的。
屬性可以像物件的成員變數一樣存取。讀取或寫入屬性將會導致呼叫對應的 getter 或 setter 方法。 例如,
// equivalent to $label = $object->getLabel();
$label = $object->label;
// equivalent to $object->setLabel('abc');
$object->label = 'abc';
如果一個屬性只有 getter 方法而沒有 setter 方法,則它被視為唯讀。在這種情況下,嘗試修改屬性值將會導致例外。
可以呼叫 hasProperty()、canGetProperty() 和/或 canSetProperty() 來檢查屬性的存在。
除了屬性功能之外,BaseObject 還引入了重要的物件初始化生命週期。特別是,建立 BaseObject 或其衍生類別的新實例將依序包含以下生命週期
- 類別建構子被呼叫;
- 物件屬性根據給定的組態進行初始化;
init()
方法被呼叫。
在上面,步驟 2 和 3 都發生在類別建構子的末尾。建議您在 init()
方法中執行物件初始化,因為在該階段,物件組態已經被套用。
為了確保上述生命週期,如果 BaseObject 的子類別需要覆寫建構子,則應像以下方式完成
public function __construct($param1, $param2, ..., $config = [])
{
...
parent::__construct($config);
}
也就是說,$config
參數 (預設為 []
) 應宣告為建構子的最後一個參數,並且父類別的實作應在建構子的末尾呼叫。
公共方法
方法 | 描述 | 定義於 |
---|---|---|
__call() | 呼叫未作為類別方法的具名方法。 | yii\base\BaseObject |
__construct() | 建構子。 | yii\base\BaseObject |
__get() | 傳回物件屬性的值。 | yii\base\BaseObject |
__isset() | 檢查屬性是否已設定,即已定義且非 null。 | yii\base\BaseObject |
__set() | 設定物件屬性的值。 | yii\base\BaseObject |
__unset() | 將物件屬性設定為 null。 | yii\base\BaseObject |
canGetProperty() | 傳回一個值,指示屬性是否可以讀取。 | yii\base\BaseObject |
canSetProperty() | 傳回一個值,指示屬性是否可以設定。 | yii\base\BaseObject |
className() | 傳回此類別的完整限定名稱。 | yii\base\BaseObject |
hasMethod() | 傳回一個值,指示方法是否已定義。 | yii\base\BaseObject |
hasProperty() | 傳回一個值,指示屬性是否已定義。 | yii\base\BaseObject |
init() | 初始化物件。 | yii\base\BaseObject |
方法詳情
呼叫未作為類別方法的具名方法。
不要直接呼叫此方法,因為它是 PHP 魔術方法,當未知的的方法被呼叫時,它會被隱式呼叫。
public mixed __call ( $name, $params ) | ||
$name | string |
方法名稱 |
$params | array |
方法參數 |
return | mixed |
方法的傳回值 |
---|---|---|
throws | yii\base\UnknownMethodException |
當呼叫未知方法時 |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
建構子。
預設實作執行兩件事
- 使用給定的組態
$config
初始化物件。 - 呼叫 init()。
如果子類別中覆寫了此方法,建議
- 建構子的最後一個參數是一個組態陣列,就像此處的
$config
一樣。 - 在建構子的末尾呼叫父類別的實作。
public void __construct ( $config = [] ) | ||
$config | array |
將用於初始化物件屬性的名稱-值對 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
public mixed __get ( $name ) | ||
$name | string |
屬性名稱 |
return | mixed |
屬性值 |
---|---|---|
throws | yii\base\UnknownPropertyException |
如果屬性未定義 |
throws | yii\base\InvalidCallException |
如果屬性是唯寫的 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
檢查屬性是否已設定,即已定義且非 null。
不要直接呼叫此方法,因為它是 PHP 魔術方法,當執行 isset($object->property)
時,它會被隱式呼叫。
請注意,如果屬性未定義,將會傳回 false。
public boolean __isset ( $name ) | ||
$name | string |
屬性名稱或事件名稱 |
return | boolean |
具名屬性是否已設定 (非 null)。 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
public void __set ( $name, $value ) | ||
$name | string |
屬性名稱或事件名稱 |
$value | mixed |
屬性值 |
throws | yii\base\UnknownPropertyException |
如果屬性未定義 |
---|---|---|
throws | yii\base\InvalidCallException |
如果屬性是唯讀的 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
將物件屬性設定為 null。
不要直接呼叫此方法,因為它是 PHP 魔術方法,當執行 unset($object->property)
時,它會被隱式呼叫。
請注意,如果屬性未定義,此方法將不會執行任何操作。如果屬性是唯讀的,它將拋出例外。
public void __unset ( $name ) | ||
$name | string |
屬性名稱 |
throws | yii\base\InvalidCallException |
如果屬性是唯讀的。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
傳回一個值,指示屬性是否可以讀取。
如果滿足以下條件,屬性是可讀取的
- 類別具有與指定名稱相關聯的 getter 方法 (在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數 (當
$checkVars
為 true 時);
另請參閱 canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
屬性是否可以讀取 |
---|
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
傳回一個值,指示屬性是否可以設定。
如果滿足以下條件,屬性是可寫入的
- 類別具有與指定名稱相關聯的 setter 方法 (在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數 (當
$checkVars
為 true 時);
另請參閱 canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
屬性是否可以寫入 |
---|
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
::class
。
傳回此類別的完整限定名稱。
public static string className ( ) | ||
return | string |
此類別的完整限定名稱。 |
---|
public static function className()
{
return get_called_class();
}
傳回一個值,指示方法是否已定義。
預設實作是對 php 函數 method_exists()
的呼叫。當您實作 php 魔術方法 __call()
時,您可以覆寫此方法。
public boolean hasMethod ( $name ) | ||
$name | string |
方法名稱 |
return | boolean |
方法是否已定義 |
---|
public function hasMethod($name)
{
return method_exists($this, $name);
}
傳回一個值,指示屬性是否已定義。
如果滿足以下條件,則定義了屬性
- 類別具有與指定名稱相關聯的 getter 或 setter 方法 (在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數 (當
$checkVars
為 true 時);
另請參閱
public boolean hasProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
屬性是否已定義 |
---|
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
註冊 或 登入 以進行評論。