国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Yii2 框架核心概念之屬性(手冊翻譯)

awesome23 / 2118人閱讀

摘要:屬性在里,類的成員變量也被稱之為屬性,這些變量是類定義的一部分,被用來表示類實(shí)例的狀態(tài)區(qū)分不同類實(shí)例。不同之處在于,當(dāng)屬性被讀時,關(guān)聯(lián)的方法被調(diào)用,當(dāng)屬性被修改時,關(guān)聯(lián)的方法被調(diào)用。

屬性

在PHP里,類的成員變量也被稱之為屬性,這些變量是類定義的一部分,被用來表示類實(shí)例的狀態(tài)(區(qū)分不同類實(shí)例)。在具體的實(shí)踐中,你可能要經(jīng)常處理可讀或者可寫屬性的特殊方式,舉個例子, 你可能想要給屬性$label賦值一個字符串,但是這個字符串必須使用trim函數(shù)過濾開頭結(jié)尾的空格,為了完成這個特殊處理你可能需要使用如下代碼

$object->label = trim($label);

上述代碼的缺點(diǎn)是,凡是在給label屬性賦值的時候,你都必須使用trim函數(shù)去處理。假設(shè)在以后label屬性的首字母必須大寫,那么凡是給label屬性賦值的代碼,就必須被修改。你應(yīng)該盡可能的避免這種代碼重復(fù)。

為了解決這個問題,yii引入了一個基礎(chǔ)類[yiiaseObject],此類可以基于類的getter和setter方法來定義類屬性。如果一個類需要以這種方式定義屬性,繼承[yiiaseObject]或者[yiiaseObject]的子類

  

提示:幾乎所有yii2框架的核心類都繼承了[yiiaseObject]類或者它的子類,這意味著核心類的getter或者setter方法你都可以以屬性的方式使用

getter方法一get為前綴;setter方法以set為前綴,get或者set后面跟隨屬性的名稱。舉個例子,getLabel()和setLabel()定義了label屬性,實(shí)現(xiàn)代碼如下

namespace appcomponents;

use yiiaseObject;

class Foo extend Object
{
    private $_label;

    public function getLabel()
    {
        return $this->_label;
    }

    public function setLabel($value)
    {
        $this->_label = trim($value);
    }
}

(需要指出的是,getter和setter方法創(chuàng)建了一個label屬性,在上述代碼中實(shí)際上關(guān)聯(lián)的是私有屬性$_label)

有g(shù)etter和setter方法定義的屬性,可以被當(dāng)作類的屬性(成員變量)直接使用。不同之處在于,當(dāng)屬性被讀時,關(guān)聯(lián)的getter方法被調(diào)用,當(dāng)屬性被修改時,關(guān)聯(lián)的setter方法被調(diào)用。例如:

// 等價于 $label = $object->getLabel();
$label = $object->label;

// 等價于 $object->setLabel("abc");
$object->label = "abc";

一個由getter方法定義的屬性,如果沒有setter方法,那么此屬性只讀,嘗試給該屬性賦值的行為都會拋出一個[[yiiaseInvalidCallException|InvalidCallException]]異常。同樣,假設(shè)定義了setter方法的屬性沒有g(shù)etter方法,此屬性只寫,嘗試讀取只寫屬性的值也會拋出一個異常,只寫屬性不常見。

通過getter,setter方法定義的屬性有幾個特殊的規(guī)則和限制

此類屬性大小寫不敏感。比如:$object->label 和 $object->Label 是相同的,

使用getter,setter定義的屬性如果在類中同時擁有同名的成員變量,同名的成員變量將會被優(yōu)先使用。比如: Foo類有一個成員變量label,$foo->label = "test" 將會直接給label賦值,而不會調(diào)用setLabel()方法

此類屬性不支持可見度。即無論屬性的getter或者setter方法定義為public,protected,private,都沒有區(qū)別

此類屬性只能有非靜態(tài)的getter,setter方法來定義,靜態(tài)方法不會以相同的方式來處理

回到開頭的問題,假設(shè)需要給label屬性賦值,且要對值處理,替代在所有賦值代碼處處理,而是在setter方法里處理所要賦予屬性的值,當(dāng)有任何新的需求或者規(guī)則施加在屬性上時,只需要修改getter或者setter方法。修改一處,所以地方都生效。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20763.html

相關(guān)文章

  • Yii2 框架核心概念組件(手冊翻譯)

    摘要:可以在方法里實(shí)現(xiàn)例行檢查和屬性正常化檢查對象方法調(diào)用開始的三個階段都在構(gòu)造函數(shù)里實(shí)現(xiàn),這意味著當(dāng)你得到一個對象的實(shí)例時,它已經(jīng)被初始化為適當(dāng)?shù)臓顟B(tài),可以被放心的使用。 組件 組件是YII框架application(應(yīng)用)的主要組成部分,它是 [yiiaseComponent]的實(shí)例或者子類。組件有三個重要特征(功能): 屬性(properties) 事件(events) 行為(...

    nemo 評論0 收藏0
  • Yii修行路 - Extension 擴(kuò)展

    摘要:運(yùn)行來安裝指定的擴(kuò)展。這更便于用戶辨別是否是的擴(kuò)展。當(dāng)用戶運(yùn)行安裝一個擴(kuò)展時,文件會被自動更新使之包含新擴(kuò)展的信息。上述代碼表明該擴(kuò)展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達(dá)到這個目的,你應(yīng)當(dāng)在公開發(fā)布前做測試。 簡述 擴(kuò)展是專門設(shè)計(jì)的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴(kuò)展在你的應(yīng)用的每個頁面底部添加...

    bovenson 評論0 收藏0
  • SegmentFault 社區(qū)訪談 | mcfog:自由進(jìn)出 Coding && A

    摘要:上次的訪談,介紹了下可愛的依云醬,回憶傳送門。這里簡單地介紹下龍女仆,全名小林家的龍女仆,為什么介紹這部劇呢因?yàn)樵O(shè)計(jì)獅顏值同學(xué)也安利了這部。劇情簡介在獨(dú)身又勞累的小林劃重點(diǎn)一名程序員身邊突然出現(xiàn)的穿著女仆服裝的美少女托爾。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的訪談,介紹了下可愛的依云醬,回憶傳送門。不...

    neroneroffy 評論0 收藏0
  • SegmentFault 社區(qū)訪談 | mcfog:自由進(jìn)出 Coding && A

    摘要:上次的訪談,介紹了下可愛的依云醬,回憶傳送門。這里簡單地介紹下龍女仆,全名小林家的龍女仆,為什么介紹這部劇呢因?yàn)樵O(shè)計(jì)獅顏值同學(xué)也安利了這部。劇情簡介在獨(dú)身又勞累的小林劃重點(diǎn)一名程序員身邊突然出現(xiàn)的穿著女仆服裝的美少女托爾。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的訪談,介紹了下可愛的依云醬,回憶傳送門。不...

    lx1036 評論0 收藏0
  • Yii2.0 RESTful API 速率限制

    摘要:之速率限制什么是速率限制權(quán)威指南翻譯過來為限流,為防止濫用,你應(yīng)該考慮對您的限流。如果在規(guī)定的時間內(nèi)接收了一個用戶大量的請求,將返回響應(yīng)狀態(tài)代碼這意味著過多的請求。 Yii2.0 RESTful API 之速率限制 什么是速率限制? 權(quán)威指南翻譯過來為限流,為防止濫用,你應(yīng)該考慮對您的 API 限流。 例如,您可以限制每個用戶 10 分鐘內(nèi)最多調(diào)用 API 100 次。 如果在規(guī)定的時...

    LeviDing 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<