最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年09月17日 09:36:47   作者:藏色散人  
這篇文章主要介紹了PHP中 Class self 與 static 有什么區(qū)別,都怎么用,需要的朋友們下面隨著小編來一起學習學習吧

對于大多數(shù) PHPer 來說,self 與 static 兩個 PHP 關鍵詞都不算陌生。我們學會通過self::xxxx這種方式來調用當前類的靜態(tài)屬性和方法。而 static 呢?想必很多人只知道它是用于定義一個靜態(tài)方法和類屬性關鍵詞。

這也是我之前的認知。

現(xiàn)在我們來回顧一下這兩個關鍵詞的一些常見用法:

// self 用法 1 :調用靜態(tài)成員屬性


class Person

{

    protected static $maxAddressCount = 5; // 收獲地址創(chuàng)建最大數(shù)量。

 

    public function test()

    {

        echo self::$maxAddressCount;

    }

}

 

$person = new Person();

$person->test();
// self 用法 2 :調用靜態(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();
// self 用法 3 :創(chuàng)建一個當前對象


// 單例示例

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();

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

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

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

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

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

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

官方示例 1:

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();

因為 Class B 繼承了 Class A。 A 與 B 都有一個靜態(tài)方法who()。此時通過B::test()的時候,調用的實際上是 Class A 的who()方法。

因為子類 Class B 的靜態(tài)方法who()屬于在 Class A 之后的子類里面才定義的。而 PHP 的默認特性只允許調用最先定義的。

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

官方示例 2:

class A {

    public static function who() {

        echo __CLASS__;

    }

    public static function test() {

        static::who(); // 后期靜態(tài)綁定從這里開始

    }

}

 

class B extends A {

    public static function who() {

        echo __CLASS__;

    }

}

 

B::test();

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

大家可以通過運行以上兩個示例進行理解。

之所以會有本篇小節(jié)內容。是因為我在實際運行當中要繼承單例方法導致了這個問題。所以,才牽扯出這個特性。

到此這篇關于PHP Class self 與 static 異同與使用詳解的文章就介紹到這了,更多相關PHP Class self 與 static 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

霸州市| 海南省| 闽清县| 工布江达县| 紫金县| 平阳县| 旌德县| 石首市| 万州区| 福贡县| 开阳县| 积石山| 息烽县| 镇原县| 萨迦县| 清徐县| 拉孜县| 黔西县| 鹤山市| 丹阳市| 定州市| 林周县| 荥阳市| 岳西县| 镶黄旗| 五莲县| 皮山县| 武夷山市| 清水河县| 久治县| 孟州市| 赤城县| 桃江县| 英超| 东源县| 呼伦贝尔市| 安图县| 吴忠市| 嘉荫县| 马边| 诸暨市|