亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

解析PHP的self關鍵字

2020-03-22 17:55:37
字體:
來源:轉載
供稿:網友

 

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

parent、html' target='_blank'>static以及this的區別

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

parent

selfparent的區分比較容易: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!

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

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

this

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

  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;

    所以這是為什么?。?!

更多PHP相關技術文章,請訪問PHP教程欄目進行學習!

以上就是解析PHP的self關鍵字的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久亚洲精品国产| 欧美丝袜一区二区三区| 欧美日韩国产黄| 国产亚洲欧洲高清一区| 久久精品国产亚洲精品| 欧美国产日本高清在线| 全色精品综合影院| 国产一区二区三区精品久久久| 欧美一区二区三区免费视| 国产91精品青草社区| 欧美性xxxx极品hd欧美风情| 亚洲欧美色婷婷| 91精品国产乱码久久久久久久久| xvideos亚洲| 欧美黄色三级网站| 欧美二区在线播放| 欧美精品日韩www.p站| 国产婷婷色综合av蜜臀av| 欧美丝袜一区二区| 欧美国产精品va在线观看| 91po在线观看91精品国产性色| 日韩在线免费视频观看| 国产午夜精品久久久| 国产日韩欧美在线视频观看| 欧美激情a在线| 国产美女被下药99| 精品国产91久久久| 欧美日韩性视频| 亚洲福利在线看| 欧美大片va欧美在线播放| 欧美激情一区二区三区高清视频| 亚洲精品国产电影| 亚洲欧美色图片| 一区二区三区动漫| 精品毛片网大全| 日韩在线视频观看正片免费网站| 午夜精品久久久久久久99热| 欧美乱妇40p| 亚洲偷欧美偷国内偷| 国产精品视频yy9099| 国产精品精品久久久| 久久久久久国产精品三级玉女聊斋| 久久久久999| 久久99国产精品自在自在app| 亚洲男人天堂古典| 国产精品美女呻吟| 国产精品视频午夜| 国产精品一区二区av影院萌芽| 亚洲成人网久久久| 亚洲天堂男人天堂女人天堂| 亚洲国产91色在线| 97色在线视频观看| 一区二区在线视频播放| 亚洲国产精品嫩草影院久久| 亚洲成人1234| 久久影院免费观看| 国产日韩欧美在线观看| 久热国产精品视频| 成人免费看吃奶视频网站| 欧美激情中文字幕乱码免费| 久久精品99国产精品酒店日本| 欧美国产视频一区二区| 在线视频一区二区| 欧美日韩国产黄| 国产精品黄页免费高清在线观看| 91精品视频在线| 欧美一级电影免费在线观看| 国产日韩欧美在线播放| 亚洲欧洲成视频免费观看| 亚洲天堂成人在线| 一本久久综合亚洲鲁鲁| 精品免费在线观看| 永久免费精品影视网站| 国产福利视频一区二区| 97视频在线观看网址| 欧美做受高潮电影o| 亚洲国产精品va在看黑人| 亚洲欧美日韩在线高清直播| 成人免费视频xnxx.com| 国产精品嫩草影院一区二区| 日韩av高清不卡| 日韩亚洲一区二区| 日韩欧美一区视频| 激情亚洲一区二区三区四区| 国产美女高潮久久白浆| 日本国产高清不卡| 亚洲日本aⅴ片在线观看香蕉| 高清日韩电视剧大全免费播放在线观看| 欧美精品在线免费观看| 欧美在线视频免费| 欧美日韩国产一区二区三区| 欧美成人午夜影院| 国产精品自产拍在线观| 国产精品成人观看视频国产奇米| 中文国产成人精品| 欧美—级高清免费播放| 国产做受69高潮| 亚洲综合在线播放| xxav国产精品美女主播| 国产这里只有精品| 97成人超碰免| 亚洲一区二区久久久久久久| 国产精品视频中文字幕91| 日韩精品免费在线视频观看| 日韩欧美国产成人| 91精品国产91久久| 欧美日韩国产色| 欧美国产日本高清在线| 国产精品第一视频| 日韩人在线观看| 亚洲网站在线观看| 久久久亚洲影院你懂的| 精品色蜜蜜精品视频在线观看| 26uuu另类亚洲欧美日本老年| 欧美黑人xxxⅹ高潮交| 亚洲在线视频福利| 国产精品久久久久久久天堂| 亚洲已满18点击进入在线看片| 91在线免费看网站| 亚洲精品久久久久久下一站| 亚洲韩国日本中文字幕| 欧洲美女7788成人免费视频| 国产不卡视频在线| 国产极品jizzhd欧美| 午夜精品久久久久久99热软件| 欧美精品做受xxx性少妇| 亚洲久久久久久久久久久| 国产精品欧美一区二区三区奶水| 自拍视频国产精品| 久久成人综合视频| 国产精品高潮呻吟视频| 色妞一区二区三区| 91sa在线看| 欧美激情一级欧美精品| 78色国产精品| 欧美老少做受xxxx高潮| 亚洲一区二区三区成人在线视频精品| 欧美日韩国产色视频| 日韩精品久久久久| 国产专区精品视频| 亚洲二区中文字幕| 日韩久久免费电影| 色婷婷综合久久久久| 国产精品第一页在线| 日韩精品中文字幕在线播放| 成人久久久久爱| 国产v综合ⅴ日韩v欧美大片| 懂色aⅴ精品一区二区三区蜜月| 日韩欧美中文字幕在线观看| 亚洲精品国产美女| 国产精品亚洲自拍| 日本久久久久亚洲中字幕| 欧美精品第一页在线播放| 疯狂欧美牲乱大交777| 国产精品精品视频一区二区三区| 欧美激情欧美狂野欧美精品| 亚洲国产精品成人va在线观看| 日本91av在线播放| 欧美亚州一区二区三区| 亚洲视频在线观看网站| 国产精品一区二区久久精品| 久久av在线看| 国产精品高清免费在线观看| 国产一区二区三区视频免费|