激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Yii框架getter與setter方法功能與用法分析

Yii框架getter與setter方法功能與用法分析

2021-09-10 16:16阿朗999 PHP教程

這篇文章主要介紹了Yii框架getter與setter方法,結合實例形式分析了Yii框架中getter與setter方法的基本功能、原理、使用方法及相關操作注意事項,需要的朋友可以參考下

本文實例講述了Yii框架gettersetter方法功能與用法。分享給大家供大家參考,具體如下:

1.屬性

在 PHP 中,類的成員變量也被稱為屬性。它們是類定義的一部分, 用來表現一個實例的狀態(也就是區分類的不同實例)。 在具體實踐中,常常會想用一個稍微特殊些的方法實現屬性的讀寫。 例如,如果有需求每次都要對 label 屬性執行 trim 操作, 就可以用以下代碼實現:

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

上述代碼的缺點是只要修改 label 屬性就必須再次調用 trim() 函數。 若將來需要用其它方式處理 label 屬性,比如首字母大寫, 就不得不修改所有給 label 屬性賦值的代碼。這種代碼的重復會導致 bug, 這種實踐顯然需要盡可能避免。

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

信息: 幾乎每個 Yii 框架的核心類都繼承自 yii\base\Object 或其子類。 這意味著只要在核心類中見到 getter 或 setter 方法,就可以像調用屬性一樣調用它。

2.講述

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace app\components;
use yii\base\BaseObject;
class Foo extend BaseObject
{
  private $_label;
  public function getLabel()
  {
    return $this->_label;
  }
  public function setLabel($value)
  {
    $this->_label = trim($value);
  }
}

(詳細解釋:getter 和 setter 方法創建了一個名為 label 的屬性, 在這個例子里,它指向一個私有的內部屬性 _label。)

getter/setter 定義的屬性用法與類成員變量一樣。兩者主要的區別是: 當這種屬性被讀取時,對應的 getter 方法將被調用;而當屬性被賦值時, 對應的 setter 方法就調用。如:

?
1
2
3
4
5
6
// 通過方法進行獲取屬性
// 等效于 $label = $object->getLabel();
// 這個是直接通過屬性獲取  就是說這個屬性找不到 就會調用方法 在方法中進行獲取屬性
$label = $object->label;
// 等效于 $object->setLabel('abc');
$object->label = 'abc';

只定義了 getter 沒有 setter 的屬性是只讀屬性。 嘗試賦值給這樣的屬性將導致 InvalidCallException (無效調用)異常。 類似的,只有 setter 方法而沒有 getter 方法定義的屬性是只寫屬性, 嘗試讀取這種屬性也會觸發異常。使用只寫屬性的情況幾乎沒有。

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

  • 這類屬性的名字是不區分大小寫的。如,$object->label 和 $object->Label 是同一個屬性。 因為 PHP 方法名是不區分大小寫的。
  • 如果此類屬性名和類成員變量相同,以后者為準。例如, 假設以上 Foo 類有個 label 成員變量,然后給 $object->label = 'abc' 賦值, 將賦給成員變量而不是 setter setLabel() 方法。
  • 這類屬性不支持可見性(訪問限制)。定義屬性的 getter 和 setter 方法是 public、protected 還是 private 對屬性的可見性沒有任何影響。
  • 這類屬性的 getter 和 setter 方法只能定義為非靜態的,若定義為靜態方法(static)則不會以相同方式處理。
  • 對不確定有無魔術方法(getter 或 setter)的屬性正常調用 property_exists() 將不會生效。你應該分別調用 canGetProperty() canSetProperty()

回到開頭提到的問題,與其處處要調用 trim() 函數, 現在我們只需在 setter setLabel() 方法內調用一次。 如果 label 首字母變成大寫的新要求來了,我們只需要修改setLabel() 方法, 而無須接觸任何其它代碼。

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

原文鏈接:https://blog.csdn.net/fujian9544/article/details/89964353

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: av电影免费观看 | 亚洲精品一区二区三区大胸 | 国产精品aⅴ | 久久久精品福利 | 夜夜夜精品视频 | 国产精品成人一区二区三区电影毛片 | 欧美亚洲国产一区二区三区 | 免费国产一级淫片 | 一级黄色欧美 | 亚洲黑人在线观看 | 国产羞羞网站 | 久久美女色视频 | 亚洲欧美日韩免费 | 亚洲草逼视频 | 日产精品久久久一区二区开放时间 | 国产九色视频在线观看 | 在线观看中文字幕国产 | 羞羞视频.www在线观看 | 久草干| 一区二区精品视频 | 国产午夜亚洲精品理论片大丰影院 | 嗯~啊~弄嗯~啊h高潮视频 | 日本成人在线免费 | 一级黄色免费观看视频 | 国产无区一区二区三麻豆 | av在线不卡免费 | 日日草天天干 | 韩国十九禁高潮床戏在线观看 | 黄色a级片视频 | 精品一区久久久 | av成人免费在线观看 | 美国一级免费视频 | 爽成人777777婷婷 | 国产91av视频 | 91看片在线观看视频 | 一级毛片免费观看 | 成人免费毛片在线观看 | 亚洲午夜不卡 | 亚洲欧美不卡视频 | 成人一级免费 | 中国老女人一级毛片视频 |