本文主要和大家分享yii2中getter和setter需要注意哪些,希望能幫助大家更能掌握yii2中getter和setter的使用方法。
讓我們先來看看yiichina中權威指南的描述:
#這類屬性的名字是不區分大小寫的。如,$object->label 和 $object->Label 是同一個屬性。 因為 PHP 方法名稱是不區分大小寫的。
如果此類屬性名稱和類別成員變數相同,則以後者為準。 例如,假設以上 Foo 類別有 label 成員變量, 然後給 $object->label = 'abc' 賦值,將賦給成員變數而不是 setter setLabel() 方法。
這類屬性不支援可見性(存取限制)。定義屬性的 getter 和 setter 方法是 public、protected 還是 private 對屬性的可見性沒有任何影響。
這類屬性的 getter 和 setter 方法只能定義為非靜態的,若定義為靜態方法(static)則不會以相同方式處理。
對 property_exists() 無法確定魔術屬性的正常呼叫。你應該叫 canGetProperty() 或 canSetProperty()。
如果這類屬性名稱和類別成員變數相同,以後者為準。 例如,假設以上 Foo 類別有個 label 成員變量, 然後給 $object->label = ‘abc’ 賦值,將賦給成員變數而不是 setter setLabel() 方法。
其實這句話就是說嘛我們的setter和getter只會對隱藏屬性和受保護屬性運作。如果是public修飾符修飾的變數則直接會賦值和獲取,而不會經過我們的setter或getter,例子:
dfa772b8e31c4c8678194fbb30e36621 * 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,所以如果你的屬性時public類型的如果想對屬性進行統一的處理就不能用getter來實現了。
本文為魏永強原創作品未經允許不得轉載:MarsWill » yii2中getter 和 setter 注意事項。
相關推薦:
ECMAScript5中的物件存取器屬性:getter和setter介紹_javascript技巧
以上是yii2中getter和setter需要注意哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!