成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? PHP面向對象中new self()與 new static()的區別淺析
全站頭部文字 我要出現在這里
PHP面向對象中new self()與 new static()的區別淺析 764 2023-12-10   

前言

本文主要跟大家介紹了關于PHP面向對象中new self()與 new static()的區別,這兩個方法new出來的對象有什么區別呢,說白了就是new出來的到底是同一個類實例還是不同的類實例呢?下面話不多說了,來一起看看詳細的介紹吧。

區別如下:

首先闡明結論,在PHP中 self指向定義了當前被調用方法的類, static指向調用當前靜態方法的類。

接下來通過一個例子來證明上面的結果

class A 
{
 public static $_a = 'Class A';

 public static function echoProperty()
 {
 echo self::$_a . PHP_EOL;
 }
}

class B extends A 
{
 public static $_a = 'Class B';
}

$obj = new B();
B::echoProperty();//輸出 Class A

之所以會這樣是因為使用self:: 或者__CLASS__對當前類的靜態引用,取決于定義被調用方法所在的類,將上面Class A的方法echoProperty做一下修改變成:

class A 
{
 public static $_a = 'Class A';

 public static function echoProperty()
 {
 echo static::$_a . PHP_EOL;
 }
}
//再次調用B::echoProperty將輸出 'CLASS B'

為了避免上面第一個例子中看到的子類重寫父類的靜態屬性后,使用繼承來的方法仍然訪問父類的靜態屬性, PHP5.3增加了一個新的語法:后期靜態綁定(Late static binding), 使用static關鍵字替代self關鍵字,使得static指向與get_called_class()返回的相同的類,即當前調用靜態方法的類, 該關鍵字對于靜態方法的訪問同樣有效。

下面的例子更好的說明了new self()和new static()之間的差異(后者使用了PHP的后期靜態綁定指向調用方法的當前類)

class A 
{
 public static function get_self() 
 {
 return new self();
 }

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

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對綠夏網的支持。


主站蜘蛛池模板: free hd xxxx moms movie777| 婷婷sese| 战狼15电影在线观看 | 影库影片| 伸舌头接吻脱裤子| 女人香韩国电影| 荡寇电视剧演员表| 二年级100个词语| 电视剧狙击手免费全集播放| 莫比乌斯电影免费观看高清完整版| 赵佳蕊| 同人视频| 少女韩国| 邵雨琪| 经视直播| 美女亲热| 同志父子第二部叫什么| 蓝家宝电影| 沈月个人简历资料| 康巴卫视直播| 香港毛片免费看| 琉璃演员表全部演员介绍| 欧美吻戏视频| 小淳| 爱之梦钢琴谱| 进宝| 数据库原理及应用课后题答案| 七年级下册语文练习册| 真实游戏电影无删减完整版| 李采潭全部作品| 里番动漫在线观看| 张子恩| 笼中女电影| 侠侣探案| 富坚真| 是王者啊第二季免费观看完整版| 触底反弹电影| 吴京电影大全| 浪人街| 泰国av| 意大利人在俄罗斯的奇遇|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103