クラス yii\base\BaseObject
BaseObject は、プロパティ機能を実装する基本クラスです。
プロパティは、ゲッターメソッド(例:getLabel
)および/またはセッターメソッド(例:setLabel
)によって定義されます。たとえば、次のゲッターメソッドとセッターメソッドは、label
という名前のプロパティを定義します。
private $_label;
public function getLabel()
{
return $this->_label;
}
public function setLabel($value)
{
$this->_label = $value;
}
プロパティ名は大文字と小文字を区別しません。
プロパティは、オブジェクトのメンバー変数のようにアクセスできます。プロパティの読み取りまたは書き込みを行うと、対応するゲッターメソッドまたはセッターメソッドが呼び出されます。例:
// equivalent to $label = $object->getLabel();
$label = $object->label;
// equivalent to $object->setLabel('abc');
$object->label = 'abc';
プロパティにゲッターメソッドのみがあり、セッターメソッドがない場合、それは読み取り専用と見なされます。この場合、プロパティ値を変更しようとすると、例外が発生します。
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()");
}
コンストラクター。
デフォルトの実装では、次の2つの処理を行います。
- 指定された構成
$config
でオブジェクトを初期化します。 - init() を呼び出します。
このメソッドが子クラスでオーバーライドされる場合、以下のことを推奨します。
- コンストラクタの最後のパラメータは、ここでの
$config
のように、構成配列にします。 - コンストラクタの最後に親の実装を呼び出します。
public void __construct ( $config = [] ) | ||
$config | array |
オブジェクトのプロパティを初期化するために使用される名前と値のペア |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
オブジェクトプロパティの値を返します。
$value = $object->property;
を実行すると暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
__set() も参照してください。
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 でないかどうかを確認します。
isset($object->property)
を実行すると暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
プロパティが定義されていない場合、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;
}
オブジェクトプロパティの値を設定します。
$object->property = $value;
を実行すると暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
__get() も参照してください。
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 に設定します。
unset($object->property)
を実行すると暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
プロパティが定義されていない場合、このメソッドは何もしないことに注意してください。プロパティが読み取り専用の場合、例外をスローします。
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);
}
}
プロパティを読み取ることができるかどうかを示す値を返します。
プロパティが読み取り可能であるのは、次のいずれかの場合です。
- クラスに、指定された名前に関連付けられたゲッターメソッドがある場合(この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスに、指定された名前のメンバー変数がある場合(
$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);
}
プロパティを設定できるかどうかを示す値を返します。
プロパティが書き込み可能であるのは、次のいずれかの場合です。
- クラスに、指定された名前に関連付けられたセッターメソッドがある場合(この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスに、指定された名前のメンバー変数がある場合(
$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);
}
プロパティが定義されているかどうかを示す値を返します。
プロパティが定義されているのは、次のいずれかの場合です。
- クラスに、指定された名前に関連付けられたゲッターまたはセッターメソッドがある場合(この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスに、指定された名前のメンバー変数がある場合(
$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);
}
サインアップ または ログイン してコメントしてください。