久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      PHP Class self與static有什么區(qū)別?都怎么用?

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

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

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

      // self 用法 1 :調(diào)用靜態(tài)成員屬性 <?php class Person {     protected static $maxAddressCount = 5; // 收獲地址創(chuàng)建最大數(shù)量。      public function test()     {         echo self::$maxAddressCount;     } }  $person = new Person(); $person->test();
      // self 用法 2 :調(diào)用靜態(tài)方法 <?php 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)建一個(gè)當(dāng)前對(duì)象 <?php // 單例示例 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)鍵詞的常見用法也在上面 3 個(gè)示例中得到綜合體現(xiàn)。

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

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

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

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

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

      官方示例 1:

      <?php 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í)通過B::test()的時(shí)候,調(diào)用的實(shí)際上是 Class A 的who()方法。

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

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

      官方示例 2:

      <?php 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 代表的永遠(yuǎn)是指向調(diào)用類。也就是說雖然在 Class A 父類里面定義的方法與子類有同名沖突的情況。但是,當(dāng)子類調(diào)用的時(shí)候,那么自動(dòng)切換到子類的靜態(tài)同名方法。取決于調(diào)用者。

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

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

      推薦學(xué)習(xí):《PHP視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)