一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - PHP Class self 與 static 異同與使用詳解

PHP Class self 與 static 異同與使用詳解

2021-11-24 16:00藏色散人 PHP教程

這篇文章主要介紹了PHP中 Class self 與 static 有什么區(qū)別,都怎么用,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

對(duì)于大多數(shù) PHPer 來(lái)說(shuō),self 與 static 兩個(gè) PHP 關(guān)鍵詞都不算陌生。我們學(xué)會(huì)通過(guò)self::xxxx這種方式來(lái)調(diào)用當(dāng)前類(lèi)的靜態(tài)屬性和方法。而 static 呢?想必很多人只知道它是用于定義一個(gè)靜態(tài)方法和類(lèi)屬性關(guān)鍵詞。

這也是我之前的認(rèn)知。

現(xiàn)在我們來(lái)回顧一下這兩個(gè)關(guān)鍵詞的一些常見(jiàn)用法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// self 用法 1 :調(diào)用靜態(tài)成員屬性
 
 
class Person
 
{
 
    protected static $maxAddressCount = 5; // 收獲地址創(chuàng)建最大數(shù)量。
 
 
 
    public function test()
 
    {
 
        echo self::$maxAddressCount;
 
    }
 
}
 
 
 
$person = new Person();
 
$person->test();
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// self 用法 2 :調(diào)用靜態(tài)方法
 
 
class Person
 
{
 
    protected static $maxAddressCount = 5; // 收獲地址創(chuàng)建最大數(shù)量。
 
 
 
    protected static function getMaxAddressCount()
 
    {
 
        return self::$maxAddressCount;
 
    }
 
 
 
    public function test()
 
    {
 
        echo self::getMaxAddressCount();
 
    }
 
}
 
 
 
$person = new Person();
 
$person->test();
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// self 用法 3 :創(chuàng)建一個(gè)當(dāng)前對(duì)象
 
 
// 單例示例
 
class Person
 
{
 
    private static $instance = null;
 
 
 
    private function __construct() {}
 
 
 
    final public static function getInstance()
 
    {
 
        if (self::$instance == null) {
 
            self::$instance = new self;
 
        }
 
        return self::$instance;
 
    }
 
 
 
    public function test()
 
    {
 
        echo "hello world!";
 
    }
 
}
 
 
 
$person = Person::getInstance();
 
$person->test();

關(guān)于 static 關(guān)鍵詞的常見(jiàn)用法也在上面 3 個(gè)示例中得到綜合體現(xiàn)

我深信上面的用法,任何一個(gè)入門(mén)的 PHPer 都是非常熟悉的。現(xiàn)在我要講的是以下兩種方式:

new self()new static() 的區(qū)別?

我相信很多人都知道new self()創(chuàng)建一個(gè)當(dāng)前類(lèi)的對(duì)象,并不知道new static()也能創(chuàng)建一個(gè)當(dāng)前類(lèi)的對(duì)象。

關(guān)于new static()這種用法呢,在官方文檔有說(shuō)明。地址:https://www.php.net/manual/zh/language.oop5.late-static-bindings.php

PHP 官方把這種方式稱為:后期靜態(tài)綁定。

官方示例 1:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class A {
 
    public static function who() {
 
        echo __CLASS__;
 
    }
 
    public static function test() {
 
        self::who();
 
    }
 
}
 
 
 
class B extends A {
 
    public static function who() {
 
        echo __CLASS__;
 
    }
 
}
 
 
 
B::test();

因?yàn)?Class B 繼承了 Class A。 A 與 B 都有一個(gè)靜態(tài)方法who()。此時(shí)通過(guò)B::test()的時(shí)候,調(diào)用的實(shí)際上是 Class A 的who()方法。

因?yàn)樽宇?lèi) Class B 的靜態(tài)方法who()屬于在 Class A 之后的子類(lèi)里面才定義的。而 PHP 的默認(rèn)特性只允許調(diào)用最先定義的。

就這引出了后期靜態(tài)綁定的概念。

官方示例 2:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class A {
 
    public static function who() {
 
        echo __CLASS__;
 
    }
 
    public static function test() {
 
        static::who(); // 后期靜態(tài)綁定從這里開(kāi)始
 
    }
 
}
 
 
 
class B extends A {
 
    public static function who() {
 
        echo __CLASS__;
 
    }
 
}
 
 
 
B::test();

我們把 Class A 里面的test()方法體的self更改為static之后,static 代表的永遠(yuǎn)是指向調(diào)用類(lèi)。也就是說(shuō)雖然在 Class A 父類(lèi)里面定義的方法與子類(lèi)有同名沖突的情況。但是,當(dāng)子類(lèi)調(diào)用的時(shí)候,那么自動(dòng)切換到子類(lèi)的靜態(tài)同名方法。取決于調(diào)用者。

大家可以通過(guò)運(yùn)行以上兩個(gè)示例進(jìn)行理解。

之所以會(huì)有本篇小節(jié)內(nèi)容。是因?yàn)槲以趯?shí)際運(yùn)行當(dāng)中要繼承單例方法導(dǎo)致了這個(gè)問(wèn)題。所以,才牽扯出這個(gè)特性。

到此這篇關(guān)于PHP Class self 與 static 異同與使用詳解的文章就介紹到這了,更多相關(guān)PHP Class self 與 static 內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.php.cn/php-weizijiaocheng-481717.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 香蕉久久久久 | 国产情侣视频观看 | 日本高清中文字幕一区二区三区 | 三级黄色片在线免费观看 | 免费网站看v片在线香蕉 | 国产福利不卡 | 免费波多野结衣庭教师 | 女人张开腿让男人桶视频免费大全 | 国产成人精品一区二区 | 97色吧| 国产精品林美惠子在线观看 | 日本三级在线观看免费 | 赤色疑惑 | 青青青草国产线观 | 卫生间被教官做好爽HH视频 | 亚洲区一 | 香港日本三级亚洲三级 | 国产精品永久免费视频观看 | 欧美美女被艹 | bbc japanese黑人强行 | 四虎现在的网址入口2022 | 日本中文字幕永久在线 | 国产主播精品在线 | sao虎在线精品永久 s0e一923春菜花在线播放 | 果冻传媒在线播放观看228集 | 色先锋av资源中文字幕 | 天堂在线中文字幕 | 18未年禁止免费观看 | 闺蜜调教我做她的脚奴 | 精品推荐国产麻豆剧传媒 | 91极品国产 | 粉嫩高中生第一次不戴套 | 国产成人综合久久精品红 | 91制片厂(果冻传媒)原档破解 | 欧美福利在线观看 | 成人私人影院在线版 | 欧美夫妇野外交换hd高清版 | 成人免费公开视频 | 从后面撕开老师的丝袜动态图 | 欧美milk大超乳 | 果冻传媒天美传媒乌鸦传媒 |