PHP中的抽象類與抽象方法/靜態屬性和靜態方法/PHP中的單利模式(單態模式)/串列化與反串列化(序列化與反序列化)/約束類型/魔術方法小結

来源:http://www.cnblogs.com/zhuanzhibukaixin/archive/2017/06/15/6980364.html
-Advertisement-
Play Games

前 言 OOP 學習了好久的PHP,今天來總結一下PHP中的抽象類與抽象方法/靜態屬性和靜態方法/PHP中的單利模式(單態模式)/串列化與反串列化(序列化與反序列化)。 1、什麼是抽象方法? 沒有方法體 {} 的方法,必須使用abstract 關鍵字修飾。這樣的方,我們叫做抽象方法。 abstrac ...


 

  前  言

 OOP 

  學習了好久的PHP,今天來總結一下PHP中的抽象類與抽象方法/靜態屬性和靜態方法/PHP中的單利模式(單態模式)/串列化與反串列化(序列化與反序列化)。

 

1  PHP中的抽象類與抽象方法
   
     1、什麼是抽象方法?
              沒有方法體 {} 的方法,必須使用abstract 關鍵字修飾。這樣的方,我們叫做抽象方法。
                    abstract function say(); //    抽象方法

          2、什麼是抽象類?
           包含抽象方法的類就叫抽象類。抽象類必須使用abstract關鍵字修飾。
                  abstract class Person{}

          3、抽象類的註意事項
                ①    抽象類可以包含非抽象方法;
                ② 包含抽象方法的類,一定是抽象類;
                    抽象類,並不一定必須包含抽象方法;
                ③ 抽象類,不能實例化。
                  (抽象類中可能包含抽象方法,抽象方法沒有方法體,實例化調用沒有意義。)
               
                   我們使用抽象類的目的!就是限制實例化!!!        

          4、 子類繼承抽象類,那麼子類必須重寫父類的所有抽象方法。除非子類也是抽象類。
         
          5、使用抽象類的作用?
              ① 限制實例化。(抽象類是一個不完整的類,裡面的抽象方法沒有方法體,所以不能實例化)
              ② 抽象類為子類的繼承提供一種規範。子類繼承一個抽象類,則必須包含並且實現抽象類中已定的抽象方法。
         
         

 

2  靜態屬性和靜態方法
  
     1、static
              ① 可以修飾屬性和方法,分別稱為靜態屬性、靜態方法,也叫類屬性、類方法;
              ② 靜態屬性、靜態方法,只能使用類名直接調用。
                  使用"類名::$靜態屬性" 、 "類名::靜態方法()"
                  Person::$sex;  Person::say();
              ③ 靜態屬性、方法,在類裝載時就會聲明。先於對象產生;
              ④ 靜態方法中,不能調用非靜態屬性或方法;
                非靜態方法,可以調用靜態屬性或方法;    
              (因為靜態屬性和方法在類裝載時就已經產生,而非靜態的屬性方法、此時還沒有實例化誕生)
              ⑤ 在類中,可以使用self關鍵字,代指類名。
                  class Person{
                  static $sex = "nan";
                  function say(){
                      echo self::$sex;
                      }
                  }
              ⑥ 靜態屬性是共用的。也就是new很多對象也是共用一個屬性。

   2、final
          ① final 修飾類,此類為最終類,不能被繼承;
          ② final    修飾方法,此方法為最終方法,不能被重寫!
          ③ final 不能修飾屬性。
     
      3、const關鍵字;
            在類中聲明常量,不能使用define()函數!必須使用const關鍵字。
           與define()聲明類似,const關鍵字聲明常量不能帶$,必須全部大寫!
           常量一旦聲明,不能改變。調用時與static一樣,使用類名帝愛用 Person::常量。
     
      【小總結】  幾種特殊操作符
      1、 .      只能連接字元串; "".""
      2、 => 聲明數組是,關聯鍵與值["key"=>"value"]
      3、 -> 對象($this new出的對象)低啊用成員屬性、成員方法。
      4、  : :  ① 使用parent關鍵字,調用父類中的同名方法;parent::say();
                ② 使用類名(和self)調用類中的靜態屬性、靜態方法、以及常量。
     
     
         

 

3  PHP中的單利模式(單態模式)
   
   單利模式也叫單態模式
     
     
       可以保證,一個類只能有一個對象實例。
     
       實現要點:
            ① 構造函數私有化,不允許使用new關鍵字創建對象。
            ② 對外提供獲取對象的方法。在方法中判斷對象是否為空,如果為空則創建對象並返回,如果不為空直接放回,
          ③ 實例對象的屬性以及過去對象的方法必須都是靜態的。
            ④ 之後,創建對象只能使用我們提供的靜態方法。      $s1 = Singleton::getSingle();
            
         

 

 1 class Singleton{
 2         private static $single=null;
 3         private function __construct(){}
 4         static function getSingle(){
 5             if(!self::$single){
 6                 self::$single = new self();
 7             }
 8             return self::$single;
 9         }
10         function __destruct(){
11             echo "啊,我被銷毀了。";
12         }
13     }
14     
15     $s1 = Singleton::getSingle();
16     $s2 = Singleton::getSingle();
17     $s3 = Singleton::getSingle();
18     $s4 = Singleton::getSingle();
單利模式簡單的代碼

 

 

4  串列化與反串列化(序列化與反序列化)
   
            1、串列化:將對象通過一系列操作,轉化為一個字元串你的過程,稱為串列化;
              2、反串列化:將串列化後的字元串,再轉為對象的過程,稱為反串列化;
              3、什麼時候使用串列化?
                  ① 對象需要在網路中傳輸的時候;
                  ② 對象需要在文件或者資料庫中持久保存的時候;
              4、怎麼實現對象串列化與反串列化?
              串列化: $str = serialize($duixiang);
              反串列化: $duixiang = unserialize($str);
              5、__sleep()魔術方法:
                  ① 當執行對象串列化的時候,會自動執行__sleep()函數;
                  ② __sleep()函數要求返回一個數組,數組中的值,就是可以串列化的屬性;不在數組中的屬性,不能被串列化;
                  function __sleep(){
                  return array("name","age");//只有name/age兩個屬性可以串列化
                  }
              6、__wakeup()魔術方法:
                  ① 當反串列化對象時,自動調用__wakeup()方法;
                  ② 自動調用時,用於給反串列化產生的新對象屬性,進行重新複製;
                  function __wakeup(){
                      $this->name = "李四";
        

 

5  約束類型 
   
    1、類型約束:是指在變數前,加上數據類型,用於約束此變數只能存放對應的數據類型.(這種操作常見於強類型語言,在PHP中,只能實現數組和對象的類型約束)
      2、如果類型約束為某一個類,則本類以及本類的子類對象,都可以通過;
     
      3、在PHP中,類型約束,只能發生在函數的形參中。
          class Person{}
          class Student extend
      
       function func(Person $p){
              //約束函數的參數,只接受Person類及Person子類
             echo "111";
             echo $p->name;
             }
          func(new Person()); √
          func(new Student()); √
       func("111");    ×
     
          形如 new Person();的形式,我們稱其為“匿名函數”;
    
         

 

6  魔術方法小總結
   
  1、__construct(): 構造函數,new一個對象時,自動調用
      2、__destruct(): 析構函數,當一個對象被銷毀前,自動調用
      3、__get():訪問類中私有屬性時,自動調用。傳遞讀取的屬性名,返回$this->屬性名
      4、__set():給類的私有屬性賦值時,自動調用。傳遞需要設置的屬性名和屬性值
      5、__isset():使用isset()檢測對象私有屬性時,自動調用。傳遞檢測的屬性名,返回isset($this->屬性名);
      6、__unset():使用unset()刪除對象私有屬性時,自動調用。傳遞刪除的屬性名,方法中執行unset($this->屬性名);
      7、__toString():使用echo列印對象時,自動調用。返回想要列印對象時,現實內容;返回必須是字元串;
      8、__call():調用一個類中未定義或未公開的方法時,自動調用。傳遞被調用的函數名,和參數列表數組;
      9、__clone():當使用clone關鍵字,克隆一個對象時,自動調用。作用是為新克隆的對象進行初始化複製;
      10、__sleep():對象序列化時,自動調用。返回一個數組,數組中的值就是可以序列化的屬性。
      11、__wakeup():對象反系列化時,自動調用。為反序列化新產生的對象,進行初始化複製;
      12、__autoload():需要在類外部聲明函數。當實例化一個為生命的類時,自動調用。傳遞實例化的類名,可以使用類名自動載入對應的類文件。
    
     

 

 

 

學習時候的筆記,可能會有一些錯誤的地方,歡迎各位的批評指點。

反思,復盤,每天收穫一點---------------------期待更好的自己


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 編譯器是怎麼實現引用類型的呢?本篇文章複習了const常量和指針,在此基礎上推測了引用類型的本質。旨在加深對語言的理解,希望對你有所幫助。 ...
  • /* 這裡要說明一下 因為本人比較懶 博客中相關文章的內容更多的是對一書中代碼的整理和簡單註解方便自己日後複習和參考, 對相關內容感興趣的初學的朋友建議請先閱讀原文。此處的內容只能當成一種學習的補充和參考。謝謝! 因原書中領域模型+數據映射器的示例代碼是連貫在一起的 所以這裡就整理在一起了。 簡單介... ...
  • jdk1.7.0_79 對於線程池大部分人可能會用,也知道為什麼用。無非就是任務需要非同步執行,再者就是線程需要統一管理起來。對於從線程池中獲取線程,大部分人可能只知道,我現在需要一個線程來執行一個任務,那我就把任務丟到線程池裡,線程池裡有空閑的線程就執行,沒有空閑的線程就等待。實際上對於線程池的執行 ...
  • 段落 非常自然,一行文字就是一個段落。 比如 這是一個段落。 會被解釋成 這是一個段落。 如果你需要另起一段,請在兩個段落之間隔一個空行。 這是一個段落。 這是另一個段落。 會解釋成 這是一個段落 這是另一個段落 不隔一個空行的換行行為,在一些編輯器中被解釋為換行,即插入一個標簽。對與另外一些編輯器 ...
  • 面試時,面試官如果想考查你機算機網路學得怎麼樣,怎麼說也得問下TCP三次握手的過程吧? so, 我4月24號就開始複習電腦網路,斷斷續續複習了3天吧。 ISP: Internet Service Provider 網際網路服務提供商 Eg: 中國電信、中國聯通和中國移動 路由器是一種專用電腦。路由 ...
  • xml文件讀取到資料庫 第一步,導包 c3p0,dom4j,jaxen,MySQL-connector 第二步 xml文件,config文件 第三步 javabean 第四步 c3p0的工具類 第五步 讀取xml文件 SAXReader中的xpath的方式 首先需要map集合添加別名,遍歷讀取到的文 ...
  • java.util.concurrent.locks 介面 Condition Condition 將 Object 監視器方法(wait、notify 和 notifyAll)分解成截然不同的對象,以便通過將這些對象與任意 Lock 實現組合使用,為每個對象提供多個等待 set(wait-set) ...
  • 最近學習Java面向對象方面的知識點,一直沒時間更新博客,因為這塊的知識點真的蠻繞的。一個知識點一個知識點的往外冒,而且對於我這個初學者來說區分構造器和方法就花費了一整天的時間。現在準備再重新過一遍知識點。 先背下來一個理念: 面向對象程式設計是將數據放在第一位的,然後再考慮操作數據的方法。 之前, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...