摘要:屬性在里,類的成員變量也被稱之為屬性,這些變量是類定義的一部分,被用來表示類實例的狀態區分不同類實例。不同之處在于,當屬性被讀時,關聯的方法被調用,當屬性被修改時,關聯的方法被調用。
屬性
在PHP里,類的成員變量也被稱之為屬性,這些變量是類定義的一部分,被用來表示類實例的狀態(區分不同類實例)。在具體的實踐中,你可能要經常處理可讀或者可寫屬性的特殊方式,舉個例子, 你可能想要給屬性$label賦值一個字符串,但是這個字符串必須使用trim函數過濾開頭結尾的空格,為了完成這個特殊處理你可能需要使用如下代碼
$object->label = trim($label);
上述代碼的缺點是,凡是在給label屬性賦值的時候,你都必須使用trim函數去處理。假設在以后label屬性的首字母必須大寫,那么凡是給label屬性賦值的代碼,就必須被修改。你應該盡可能的避免這種代碼重復。
為了解決這個問題,yii引入了一個基礎類[yiiaseObject],此類可以基于類的getter和setter方法來定義類屬性。如果一個類需要以這種方式定義屬性,繼承[yiiaseObject]或者[yiiaseObject]的子類
提示:幾乎所有yii2框架的核心類都繼承了[yiiaseObject]類或者它的子類,這意味著核心類的getter或者setter方法你都可以以屬性的方式使用
getter方法一get為前綴;setter方法以set為前綴,get或者set后面跟隨屬性的名稱。舉個例子,getLabel()和setLabel()定義了label屬性,實現代碼如下
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方法創建了一個label屬性,在上述代碼中實際上關聯的是私有屬性$_label)
有getter和setter方法定義的屬性,可以被當作類的屬性(成員變量)直接使用。不同之處在于,當屬性被讀時,關聯的getter方法被調用,當屬性被修改時,關聯的setter方法被調用。例如:
// 等價于 $label = $object->getLabel(); $label = $object->label; // 等價于 $object->setLabel("abc"); $object->label = "abc";
一個由getter方法定義的屬性,如果沒有setter方法,那么此屬性只讀,嘗試給該屬性賦值的行為都會拋出一個[[yiiaseInvalidCallException|InvalidCallException]]異常。同樣,假設定義了setter方法的屬性沒有getter方法,此屬性只寫,嘗試讀取只寫屬性的值也會拋出一個異常,只寫屬性不常見。
通過getter,setter方法定義的屬性有幾個特殊的規則和限制
此類屬性大小寫不敏感。比如:$object->label 和 $object->Label 是相同的,
使用getter,setter定義的屬性如果在類中同時擁有同名的成員變量,同名的成員變量將會被優先使用。比如: Foo類有一個成員變量label,$foo->label = "test" 將會直接給label賦值,而不會調用setLabel()方法
此類屬性不支持可見度。即無論屬性的getter或者setter方法定義為public,protected,private,都沒有區別
此類屬性只能有非靜態的getter,setter方法來定義,靜態方法不會以相同的方式來處理
回到開頭的問題,假設需要給label屬性賦值,且要對值處理,替代在所有賦值代碼處處理,而是在setter方法里處理所要賦予屬性的值,當有任何新的需求或者規則施加在屬性上時,只需要修改getter或者setter方法。修改一處,所以地方都生效。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20763.html
摘要:可以在方法里實現例行檢查和屬性正常化檢查對象方法調用開始的三個階段都在構造函數里實現,這意味著當你得到一個對象的實例時,它已經被初始化為適當的狀態,可以被放心的使用。 組件 組件是YII框架application(應用)的主要組成部分,它是 [yiiaseComponent]的實例或者子類。組件有三個重要特征(功能): 屬性(properties) 事件(events) 行為(...
摘要:運行來安裝指定的擴展。這更便于用戶辨別是否是的擴展。當用戶運行安裝一個擴展時,文件會被自動更新使之包含新擴展的信息。上述代碼表明該擴展依賴于包。例如,上述的條目聲明將對應于別名。為達到這個目的,你應當在公開發布前做測試。 簡述 擴展是專門設計的在 Yii 應用中隨時可拿來使用的, 并可重發布的軟件包。 基礎 例如, yiisoft/yii2-debug 擴展在你的應用的每個頁面底部添加...
摘要:上次的訪談,介紹了下可愛的依云醬,回憶傳送門。這里簡單地介紹下龍女仆,全名小林家的龍女仆,為什么介紹這部劇呢因為設計獅顏值同學也安利了這部。劇情簡介在獨身又勞累的小林劃重點一名程序員身邊突然出現的穿著女仆服裝的美少女托爾。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的訪談,介紹了下可愛的依云醬,回憶傳送門。不...
摘要:上次的訪談,介紹了下可愛的依云醬,回憶傳送門。這里簡單地介紹下龍女仆,全名小林家的龍女仆,為什么介紹這部劇呢因為設計獅顏值同學也安利了這部。劇情簡介在獨身又勞累的小林劃重點一名程序員身邊突然出現的穿著女仆服裝的美少女托爾。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的訪談,介紹了下可愛的依云醬,回憶傳送門。不...
摘要:之速率限制什么是速率限制權威指南翻譯過來為限流,為防止濫用,你應該考慮對您的限流。如果在規定的時間內接收了一個用戶大量的請求,將返回響應狀態代碼這意味著過多的請求。 Yii2.0 RESTful API 之速率限制 什么是速率限制? 權威指南翻譯過來為限流,為防止濫用,你應該考慮對您的 API 限流。 例如,您可以限制每個用戶 10 分鐘內最多調用 API 100 次。 如果在規定的時...
閱讀 2283·2021-09-30 09:47
閱讀 2210·2021-09-26 09:55
閱讀 2938·2021-09-24 10:27
閱讀 1535·2019-08-27 10:54
閱讀 960·2019-08-26 13:40
閱讀 2486·2019-08-26 13:24
閱讀 2411·2019-08-26 13:22
閱讀 1720·2019-08-23 18:38