亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

annuaire recherche
閱讀前篇 簡(jiǎn)介 Yii 是什么 從 Yii 1.1 升級(jí) 入門(mén) 安裝 Yii 運(yùn)行應(yīng)用 第一次問(wèn)候 使用Forms 數(shù)據(jù)庫(kù)應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過(guò)濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請(qǐng)求處理 運(yùn)行概述 啟動(dòng)引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請(qǐng)求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯(cuò)誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類(lèi)自動(dòng)加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴(lài)注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫(kù)工作 數(shù)據(jù)庫(kù)訪(fǎng)問(wèn) (Data Access Objects) 查詢(xún)生成器(Query Builder) 活動(dòng)記錄(Active Record) 數(shù)據(jù)庫(kù)遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶(hù)數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗(yàn)證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(yè)(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶(hù)端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶(hù)端認(rèn)證(Auth Clients) 最佳安全實(shí)踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁(yè)面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(mén)(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯(cuò)誤處理(Error Handling) 開(kāi)發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測(cè)試 概述(Overview) 配置測(cè)試環(huán)境(Testing environment setup) 單元測(cè)試(Unit Tests) 功能測(cè)試(Function Tests) 驗(yàn)收測(cè)試(Acceptance Tests) 測(cè)試夾具(Fixtures) 高級(jí)專(zhuān)題 高級(jí)應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺(tái)命令 核心驗(yàn)證器(Core Validators) 國(guó)際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類(lèi) 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
personnages

屬性(Property)

屬性(Property)

在 PHP 中,類(lèi)的成員變量也被稱(chēng)為屬性(properties)。它們是類(lèi)定義的一部分,用來(lái)表現(xiàn)一個(gè)實(shí)例的狀態(tài)(也就是區(qū)分類(lèi)的不同實(shí)例)。在具體實(shí)踐中,常常會(huì)想用一個(gè)稍微特殊些的方法實(shí)現(xiàn)屬性的讀寫(xiě)。例如,如果有需求每次都要對(duì)?label?屬性執(zhí)行 trim 操作,就可以用以下代碼實(shí)現(xiàn):

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

上述代碼的缺點(diǎn)是只要修改?label?屬性就必須再次調(diào)用?trim()?函數(shù)。若將來(lái)需要用其它方式處理?label?屬性,比如首字母大寫(xiě),就不得不修改所有給?label?屬性賦值的代碼。這種代碼的重復(fù)會(huì)導(dǎo)致 bug,這種實(shí)踐顯然需要盡可能避免。

為解決該問(wèn)題,Yii 引入了一個(gè)名為 yii\base\Object 的基類(lèi),它支持基于類(lèi)內(nèi)的?getter?和?setter(讀取器和設(shè)定器)方法來(lái)定義屬性。如果某類(lèi)需要支持這個(gè)特性,只需要繼承 yii\base\Object 或其子類(lèi)即可。

補(bǔ)充:幾乎每個(gè) Yii 框架的核心類(lèi)都繼承自 yii\base\Object 或其子類(lèi)。這意味著只要在核心類(lèi)中見(jiàn)到 getter 或 setter 方法,就可以像調(diào)用屬性一樣調(diào)用它。

getter 方法是名稱(chēng)以?get?開(kāi)頭的方法,而 setter 方法名以?set?開(kāi)頭。方法名中?get?或?set?后面的部分就定義了該屬性的名字。如下面代碼所示,getter 方法?getLabel()?和 setter 方法?setLabel()?操作的是?label?屬性,:

namespace app\components;

use yii\base\Object;

class Foo extend Object{
    private $_label;

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

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

(詳細(xì)解釋?zhuān)篻etter 和 setter 方法創(chuàng)建了一個(gè)名為?label?的屬性,在這個(gè)例子里,它指向一個(gè)私有的內(nèi)部屬性?_label。)

getter/setter 定義的屬性用法與類(lèi)成員變量一樣。兩者主要的區(qū)別是:當(dāng)這種屬性被讀取時(shí),對(duì)應(yīng)的 getter 方法將被調(diào)用;而當(dāng)屬性被賦值時(shí),對(duì)應(yīng)的 setter 方法就調(diào)用。如:

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

// 等效于 $object->setLabel('abc');$object->label = 'abc';

只定義了 getter 沒(méi)有 setter 的屬性是只讀屬性。嘗試賦值給這樣的屬性將導(dǎo)致 yii\base\InvalidCallException (無(wú)效調(diào)用)異常。類(lèi)似的,只有 setter 方法而沒(méi)有 getter 方法定義的屬性是只寫(xiě)屬性,嘗試讀取這種屬性也會(huì)觸發(fā)異常。使用只寫(xiě)屬性的情況幾乎沒(méi)有。

通過(guò) getter 和 setter 定義的屬性也有一些特殊規(guī)則和限制:

  • 這類(lèi)屬性的名字是不區(qū)分大小寫(xiě)的。如,$object->label?和?$object->Label?是同一個(gè)屬性。因?yàn)?PHP 方法名是不區(qū)分大小寫(xiě)的。
  • 如果此類(lèi)屬性名和類(lèi)成員變量相同,以后者為準(zhǔn)。例如,假設(shè)以上?Foo?類(lèi)有個(gè)?label?成員變量,然后給?$object->label = 'abc'?賦值,將賦給成員變量而不是 setter?setLabel()?方法。
  • 這類(lèi)屬性不支持可見(jiàn)性(訪(fǎng)問(wèn)限制)。定義屬性的 getter 和 setter 方法是 public、protected 還是 private 對(duì)屬性的可見(jiàn)性沒(méi)有任何影響。
  • 這類(lèi)屬性的 getter 和 setter 方法只能定義為非靜態(tài)的,若定義為靜態(tài)方法(static)則不會(huì)以相同方式處理。
回到開(kāi)頭提到的問(wèn)題,與其處處要調(diào)用?trim()?函數(shù),現(xiàn)在我們只需在 setter?setLabel()?方法內(nèi)調(diào)用一次。如果 label 首字母變成大寫(xiě)的新要求來(lái)了,我們只需要修改setLabel()?方法,而無(wú)須接觸任何其它代碼。
Article précédent: Article suivant: