首頁  >  文章  >  後端開發  >  yii2中getter和setter需要注意哪些

yii2中getter和setter需要注意哪些

小云云
小云云原創
2018-03-16 13:16:451305瀏覽

本文主要和大家分享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 注意事項。

相關推薦:

Javascript中getter和setter基本介紹

談談因Vue.js引發關於getter和setter的思考

ECMAScript5中的物件存取器屬性:getter和setter介紹_javascript技巧

以上是yii2中getter和setter需要注意哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn