この記事では、yii2 のゲッターとセッターに関して注意する必要があることを主に説明します。これが、yii2 でのゲッターとセッターの使い方をよりよく習得するのに役立つことを願っています。
まず、yiichina の信頼できるガイドの説明を見てみましょう:
そのような属性の名前は、大文字と小文字が区別されません。たとえば、$object->label と $object->Label は同じ属性です。 PHP メソッド名では大文字と小文字が区別されないためです。
このタイプの属性の名前がクラスのメンバー変数と同じ場合は、後者が優先されます。 たとえば、上記の Foo クラスに label メンバー変数があるとします。 次に、値を $object->label = 'abc' に割り当てます。これは、セッター setLabel() メソッドの代わりにメンバー変数に割り当てられます。
このタイプの属性は、可視性 (アクセス制限) をサポートしていません。プロパティの getter メソッドと setter メソッドが public、protected、または private であるかどうかは、プロパティの可視性には影響しません。
そのようなプロパティの getter メソッドと setter メソッドは、非静的メソッドとしてのみ定義できます。静的メソッド (static) として定義されている場合、それらは同じように処理されません。
property_exists() への通常の呼び出しでは、マジック プロパティを決定できません。 canGetProperty() または canSetProperty() を呼び出す必要があります。
このタイプの属性の名前がクラスのメンバー変数と同じ場合は、後者が優先されます。 たとえば、上記の Foo クラスに label メンバー変数があり、$object->label = ‘abc’ に値を代入すると、セッター setLabel() メソッドの代わりにメンバー変数に代入されるとします。
実際、この文は、セッターとゲッターが非表示のプロパティと保護されたプロパティに対してのみ機能することを意味します。 public 修飾子で変更された変数の場合、setter や getter を経由せずに直接代入され、取得されます。 例:
<?php /** * Created by PhpStorm. * Author: weiyongqiang <hayixia606@163.com> * Site: www.weiyongqiang.com * Date: 2017/3/6 * Time: 23:29 */ namespace frontend\components; use yii\base\Component; class UserInfo extends Component { public $userid = 11; public $userName; public function __construct(array $config) { parent::__construct($config); } public function setUserId($userId) { echo 123; $this->userId = $userId; } public function getuserid() { //return $this->userId; return 123456; } } 然后实例化组件后的获取userid属性
$userInfo = new UserInfo([]);echo "<pre/>"; //$userInfo->userId = 10;echo $userInfo->userid;exit;
出力結果は: 11
つまり、userid が public の属性である場合を意味します。修飾子は、基本的に私が定義した getuserid を入力しません。そのため、属性がパブリック型であり、属性を均一に処理したい場合は、getter を使用してそれを実現することはできません。
この記事は魏永強によるオリジナル作品であり、許可なく複製することはできません: MarsWill » yii2 のゲッターとセッターについて注意すべきこと。
関連する推奨事項:
Vue.js によって引き起こされるゲッターとセッターについての考えについて話す
ECMAScript5 のオブジェクト アクセサー プロパティ: ゲッターとセッターの概要_ JavaScript スキル
以上がyii2 のゲッターとセッターで注意すべき点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。