婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP中的self關鍵字詳解

PHP中的self關鍵字詳解

熱門標簽:百度地圖怎樣標注圖標 咸寧銷售電銷機器人系統 外呼系統能給企業帶來哪些好處 余姚電話機器人 電銷機器人問門薩維品牌my 百度地圖標注偏差 廣東廣州在怎么申請400電話 400電話蘭州申請請 開發地圖標注類網站

前言

PHP群里有人詢問self關鍵字的用法,答案是比較明顯的:靜態成員函數內不能用this調用非成員函數,但可以用self調用靜態成員函數/變量/常量;其他成員函數可以用self調用靜態成員函數以及非靜態成員函數。隨著討論的深入,發現self并沒有那么簡單。鑒于此,本文先對幾個關鍵字做對比和區分,再總結self的用法。

與parent、static以及this的區別

要想將徹底搞懂self,要與parent、static以及this區分開。以下分別做對比。

parent

self與parent的區分比較容易:parent引用父類/基類被隱蓋的方法(或變量),self則引用自身方法(或變量)。例如構造函數中調用父類構造函數:

class Base {
 public function __construct() {
  echo "Base contructor!", PHP_EOL;
 }
}

class Child {
 public function __construct() {
  parent::__construct();
  echo "Child contructor!", PHP_EOL;
 }
}

new Child;
// 輸出:
// Base contructor!
// Child contructor!

static

static常規用途是修飾函數或變量使其成為類函數和類變量,也可以修飾函數內變量延長其生命周期至整個應用程序的生命周期。但是其與self關聯上是PHP 5.3以來引入的新用途:靜態延遲綁定。

有了static的靜態延遲綁定功能,可以在運行時動態確定歸屬的類。例如:

class Base {
 public function __construct() {
  echo "Base constructor!", PHP_EOL;
 }

 public static function getSelf() {
  return new self();
 }

 public static function getInstance() {
  return new static();
 }

 public function selfFoo() {
  return self::foo();
 }

 public function staticFoo() {
  return static::foo();
 }

 public function thisFoo() {
  return $this->foo();
 }

 public function foo() {
  echo "Base Foo!", PHP_EOL;
 }
}

class Child extends Base {
 public function __construct() {
  echo "Child constructor!", PHP_EOL;
 }

 public function foo() {
  echo "Child Foo!", PHP_EOL;
 }
}

$base = Child::getSelf();
$child = Child::getInstance();

$child->selfFoo();
$child->staticFoo();
$child->thisFoo();

程序輸出結果如下:

Base constructor!
Child constructor!
Base Foo!
Child Foo!
Child Foo!

在函數引用上,self與static的區別是:對于靜態成員函數,self指向代碼當前類,static指向調用類;對于非靜態成員函數,self抑制多態,指向當前類的成員函數,static等同于this,動態指向調用類的函數。

parent、self、static三個關鍵字聯合在一起看挺有意思,分別指向父類、當前類、子類,有點“過去、現在、未來”的味道。

this

self與this是被討論最多,也是最容易引起誤用的組合。兩者的主要區別如下:

  1. this不能用在靜態成員函數中,self可以;
  2. 對靜態成員函數/變量的訪問,建議 用self,不要用$this::或$this->的形式;
  3. 對非靜態成員變量的訪問,不能用self,只能用this;
  4. this要在對象已經實例化的情況下使用,self沒有此限制;
  5. 在非靜態成員函數內使用,self抑制多態行為,引用當前類的函數;而this引用調用類的重寫(override)函數(如果有的話)。

self的用途

看完與上述三個關鍵字的區別,self的用途是不是呼之即出?一句話總結,那就是:self總是指向“當前類(及類實例)”。詳細說則是:

  1. 替代類名,引用當前類的靜態成員變量和靜態函數;
  2. 抑制多態行為,引用當前類的函數而非子類中覆蓋的實現;

槽點

  1. 這幾個關鍵字中,只有this要加$符號且必須加,強迫癥表示很難受;
  2. 靜態成員函數中不能通過$this->調用非靜態成員函數,但是可以通過self::調用,且在調用函數中未使用$this->的情況下還能順暢運行。此行為貌似在不同PHP版本中表現不同,在當前的7.3中ok;
  3. 在靜態函數和非靜態函數中輸出self,猜猜結果是什么?都是string(4) "self",迷之輸出;
  4. return $this instanceof static::class;會有語法錯誤,但是以下兩種寫法就正常:
$class = static::class;
return $this instanceof $class;
// 或者這樣:
return $this instanceof static;

所以這是為什么啊?!

參考

When to use self over $this?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • php類中的$this,static,final,const,self這幾個關鍵字使用方法
  • PHP中static關鍵字以及與self關鍵字的區別
  • PHP5中的this,self和parent關鍵字詳解教程

標簽:衡陽 銅陵 麗江 鷹潭 巴彥淖爾 重慶 十堰 臨沂

巨人網絡通訊聲明:本文標題《PHP中的self關鍵字詳解》,本文關鍵詞  PHP,中的,self,關鍵字,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP中的self關鍵字詳解》相關的同類信息!
  • 本頁收集關于PHP中的self關鍵字詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91麻豆精东视频| 无码av免费一区二区三区试看| 久久国产夜色精品鲁鲁99| 国产精品无人区| 精品福利一二区| 欧美嫩在线观看| 91麻豆自制传媒国产之光| 国产盗摄一区二区三区| 日本怡春院一区二区| 亚洲在线视频免费观看| 日韩美女啊v在线免费观看| ww亚洲ww在线观看国产| 日韩天堂在线观看| 欧美一区二区精美| 欧美人xxxx| 欧美日韩视频一区二区| 色中色一区二区| 91蝌蚪porny| 一本到不卡免费一区二区| 不卡的av中国片| www.一区二区| 91年精品国产| 91成人免费网站| 欧洲精品一区二区三区在线观看| 色综合中文字幕国产| 91热门视频在线观看| 欧美三片在线视频观看| 欧美日韩精品欧美日韩精品| 欧美日韩国产一级二级| 欧美美女一区二区在线观看| 91精品久久久久久久91蜜桃| 日韩一级完整毛片| 久久久国产综合精品女国产盗摄| 久久青草欧美一区二区三区| 国产精品素人一区二区| 亚洲视频免费在线观看| 亚洲第一综合色| 久久66热偷产精品| 成人午夜av在线| 欧美日韩在线一区二区| 日韩三级视频在线观看| 欧美激情一区二区三区全黄| 亚洲综合一区二区精品导航| 日韩国产精品大片| 成人美女视频在线观看18| 欧美在线观看视频一区二区| 欧美成人女星排行榜| 亚洲欧洲av另类| 日本午夜精品视频在线观看| 国产 欧美在线| 欧美顶级少妇做爰| 久久九九久久九九| 亚洲国产一区二区在线播放| 六月丁香婷婷久久| 色女孩综合影院| 久久综合九色综合97婷婷 | 国产91精品一区二区麻豆网站| www.在线成人| 日韩美女一区二区三区| 亚洲欧洲精品成人久久奇米网| 日韩国产精品久久久久久亚洲| 91婷婷韩国欧美一区二区| 精品久久国产97色综合| 亚洲一区二区三区四区在线观看| 极品少妇xxxx精品少妇偷拍| 欧美性猛片aaaaaaa做受| 久久精品一区二区三区不卡| 亚洲h在线观看| 97久久久精品综合88久久| 精品欧美乱码久久久久久1区2区| 亚洲欧美激情一区二区| 国产精品自在在线| 日韩午夜精品电影| 日韩精品免费专区| 欧美艳星brazzers| 亚洲色欲色欲www| 成人性生交大片免费看视频在线| 在线不卡的av| 亚洲成人精品一区二区| 色综合激情五月| 中文字幕永久在线不卡| 国产高清成人在线| 久久久亚洲综合| 韩国v欧美v亚洲v日本v| 欧美一卡二卡三卡| 日韩精品1区2区3区| 欧美性videosxxxxx| 一区二区三区中文字幕精品精品| 成人精品高清在线| 久久日韩粉嫩一区二区三区| 久久er99热精品一区二区| 欧美精品aⅴ在线视频| 午夜电影网一区| 在线不卡免费欧美| 毛片av一区二区三区| 欧美一区二区黄色| 老司机精品视频线观看86| 777xxx欧美| 久99久精品视频免费观看| 精品日本一线二线三线不卡| 狠狠色2019综合网| 欧美本精品男人aⅴ天堂| 奇米四色…亚洲| 精品久久国产字幕高潮| 国产精品白丝jk白祙喷水网站| 精品国产乱码久久久久久久| 久久国产精品色| 国产视频一区二区在线观看| 国产大陆亚洲精品国产| 国产精品初高中害羞小美女文| 99久久婷婷国产综合精品电影| 一区二区三区在线播放| 91麻豆精品国产自产在线| 六月丁香综合在线视频| 国产视频一区在线播放| 91麻豆.com| 美女脱光内衣内裤视频久久网站| 久久一二三国产| 99视频精品在线| 亚洲午夜久久久久| 日韩午夜在线播放| 成人黄色小视频在线观看| 亚洲最大色网站| 久久久噜噜噜久噜久久综合| 波多野结衣精品在线| 亚洲高清免费观看| 欧美精品一区二区三| 99精品久久99久久久久| 天天做天天摸天天爽国产一区| 精品国产一二三| 一本到不卡免费一区二区| 日本网站在线观看一区二区三区| 国产欧美精品日韩区二区麻豆天美| 成人免费视频app| 亚洲一区在线观看视频| 欧美日韩精品专区| 国产成人午夜片在线观看高清观看| 中文字幕亚洲区| 欧美一区二区三区影视| 国产69精品久久99不卡| 视频一区二区国产| 久久综合久久久久88| 91国在线观看| 国产精品自拍三区| 天天射综合影视| www成人在线观看| 国产成人在线影院 | 欧美在线free| 国内精品写真在线观看| 亚洲一二三四久久| 麻豆传媒一区二区三区| 亚洲精品中文在线影院| 久久综合成人精品亚洲另类欧美| 91蜜桃在线免费视频| 成人高清视频在线| 亚洲一级不卡视频| 亚洲欧美怡红院| 精品国产一区二区三区四区四| 91久久免费观看| 91理论电影在线观看| 成人三级伦理片| 精品一区二区三区欧美| 亚洲成人免费看| 一卡二卡欧美日韩| 一区二区视频在线看| 国产精品污网站| 久久夜色精品国产欧美乱极品| 91精品国产入口在线| 欧美无乱码久久久免费午夜一区| 99热99精品| av激情综合网| 国产91丝袜在线播放九色| 久久av资源站| 久久国产剧场电影| 极品少妇一区二区三区精品视频| 免费视频最近日韩| 视频一区视频二区中文| 亚州成人在线电影| 午夜视频一区在线观看| 首页国产丝袜综合| 日韩av在线播放中文字幕| 亚洲成国产人片在线观看| 亚洲一区二区不卡免费| 欧美一区二区网站| 欧美成人a视频| 欧美不卡视频一区| 久久久99精品久久| 国产午夜一区二区三区| 欧美激情一区二区三区蜜桃视频| 欧美激情一区二区| 亚洲欧美日韩人成在线播放| 亚洲欧洲日产国产综合网| 国产精品传媒视频| 亚洲国产精品久久人人爱| 亚洲v中文字幕| 欧美aaa在线| 国产一区二区影院| 成人黄色一级视频| 欧美日韩视频不卡| 日韩视频免费观看高清完整版 |