日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
歸納總結(jié)PHP對象基礎(chǔ)

本篇文章給大家?guī)砹岁P(guān)于php中的相關(guān)知識,其中主要介紹了面向?qū)ο蟮南嚓P(guān)問題,面向?qū)ο缶幊痰谋举|(zhì)是增加數(shù)據(jù)和功能的操作主體即對象,希望對大家有幫助。

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

實踐學(xué)習(xí)php,thinkphp,Redis,vue,uni-app等技術(shù),推薦開源電商系統(tǒng)likeshop,可以借鑒思路,可去版權(quán)免費商用,gitee下載地址:
點擊進(jìn)項目地址

面向?qū)ο螅篛OP(objected oriented programming)編程

面向過程是一種編程思想

面向?qū)ο缶幊痰谋举|(zhì)是增加數(shù)據(jù)和功能的操作主體,即對象

面向?qū)ο笾械乃械臄?shù)據(jù)和功能多是由主體(對象)來調(diào)用和操作

面向?qū)ο蠡A(chǔ)

面向過程和面向?qū)ο髤^(qū)別

面向?qū)ο箨P(guān)鍵字

  • 類:class,定義面向?qū)ο笾黧w的最外層結(jié)構(gòu),用來包裹主體的數(shù)據(jù)和功能(函數(shù))
  • 對象:object,某類事務(wù)的具體代表,又稱為實例
  • 實例化:new,類產(chǎn)生對象的過程
  • 類成員:member
    • 方法:method,本質(zhì)是在類class結(jié)構(gòu)中創(chuàng)建的函數(shù),稱之為成員方法或者成員函數(shù)
    • 屬性:property,本質(zhì)是在類class結(jié)構(gòu)中創(chuàng)建的變量,稱之為成員變量
    • 類常量:const,本質(zhì)是在類class結(jié)構(gòu)中創(chuàng)建的常量

創(chuàng)建對象


    # 輸出object(People)#1 (0) { }
    #1表示:對象編號,與類無關(guān),是整個腳本中對象的序號(0)表示:成員變量(屬性)個數(shù){}表示:具體成員變量信息(鍵值對)

類對象

money;$a->money='20';$a->sex='male';unset($a->name);echo '
';# 方法操作$a->display();echo '
';var_dump($a);?> # 輸出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }

注意:類常量不是由對象來進(jìn)行訪問

訪問修飾限定符

在屬性或者方法前的修飾關(guān)鍵字,用來控制屬性或者方法的訪問位置

  • public:公有,類內(nèi)和類外都可以訪問
  • protected:受保護,只允許在相關(guān)類內(nèi)部訪問
  • private:私有,只允許在定義類內(nèi)部訪問

屬性必須有訪問修飾限定符,方法可以沒有訪問修飾限定符,默認(rèn)就是 public

類內(nèi)部對象

$this,方法內(nèi)部內(nèi)置的一個對象,會自動指向來調(diào)用的方法的對象

$this 存在于方法內(nèi)部(僅限內(nèi)部使用),所以相當(dāng)于在類的結(jié)構(gòu)內(nèi)部

  • 可以訪問任意訪問修飾限定符修飾的成員
  • 私有成員都是通過公有方法來實現(xiàn)訪問(公有方法可以在類外部訪問)

    # 輸出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }

$this 代表的是對象,而 $this 所在環(huán)境為類內(nèi)部的方法內(nèi)部,所以 $this 對象是在類內(nèi)部訪問,因此所有的屬性和方法,不受訪問修飾限定符限制

構(gòu)造方法

  • __construct() 是一種系統(tǒng)內(nèi)置的魔術(shù)方法,該方法的特性是在對象實例化之后,對象立即自動調(diào)用

  • 構(gòu)造方法的目的就是為了初始化資源,包括對象屬性和其他資源

  • 一旦構(gòu)造方法定義好后,且構(gòu)造方法自帶參數(shù),那么就只能使用 new 類名(參數(shù)列表) 方式才能正確實例化

  • 魔術(shù)方法也可以通過對象直接調(diào)用的方式調(diào)用,不過沒有實際用處

name = $name;
        $this->sex = $sex;
    }}$a = new Article('xiaowang', 'famale');var_dump($a);?>

析構(gòu)方法

  • __destruct(),對象在被銷毀時自動調(diào)用,釋放資源
  • 對象銷毀
    1. 對象無變量指向(變量指向其他數(shù)據(jù))
    2. 對象被主動銷毀(unset銷毀對象變量)
    3. 腳本執(zhí)行結(jié)束(自動釋放資源)
  • PHP 腳本執(zhí)行結(jié)束會釋放所有資源,所以一般較少用析構(gòu)方法

    # 不銷毀對象,php在運行結(jié)束也會釋放資源# end__destruct

對象傳值

定義:將保存對象的變量賦值給另外一個變量

在 PHP 中,對象的傳值是引用傳遞:即一個對象變量賦值給另外一個變量,兩個變量指向同一個對象地址,即只有一個對象

';$a->name="wangxiaohu";var_dump($a,$b);echo '
';?> # 輸出object(Article)#1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" } object(Article) #1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" }object(Article) #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" } object(Article) #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" }

范圍解析操作符(類常量訪問)

有兩個冒號組成 “::” ,專門用于類實現(xiàn)類成員操作,可以實現(xiàn)類直接訪問類成員

  • 范圍解析操作符是用于給類(類名)訪問類成員使用的

    類名::類成員
  • 范圍解析操作符也可以被對象用來當(dāng)作類使用(不建議)

    $對象名::類成員
  • 類常量只能被類訪問

NAME 來進(jìn)行訪問的$a=new Article();echo $a::NAME;
    # 范圍解析操作符兼容對象,找到對象所屬類最終進(jìn)行訪問,效率降低,靈活性提高?>

類常量是固定的,而對象的屬性是不同對象不同的

靜態(tài)成員

定義:使用 static 關(guān)鍵字修飾的類成員,表示該成員屬于類訪問

  • 靜態(tài)成員
    • 靜態(tài)屬性
    • 靜態(tài)方法
  • 靜態(tài)成員是明確用來給類訪問的,而不是對象
  • 靜態(tài)成員只是多了一個 static 關(guān)鍵字修飾,本身也可以被對象訪問
  • 靜態(tài)成員同樣可以使用不同的訪問修飾限定符限定,效果一致

self關(guān)鍵字

  • 在類的內(nèi)部(方法里面)使用,代替類名的寫法
  • self 如同 $this 代表內(nèi)部對象一樣,能夠在方法內(nèi)部代替當(dāng)前類名
  • 能夠保障用戶方便修改類名字
  • self 關(guān)鍵字是代替類名,所以需要配合范圍解析操作符 ::

    # 輸出object(Article)
    #1 (0) { } object(Article)
    #2 (0) { }

類加載

類的訪問必須保證類在內(nèi)存中已經(jīng)存在,所以需要再用類之前將類所在的 PHP 文件加載到內(nèi)存中

  • 類的加載分為兩種

    • 手動加載:在需要使用類之間通過 include 將包含類的文件引入到內(nèi)存
    • 自動加載:提前定義好類結(jié)構(gòu)和位置,寫好引入類文件代碼,在系統(tǒng)需要類而內(nèi)存不存在的時候想辦法讓寫好的加載類的代碼執(zhí)行(自動加載是自動運行寫好的加載類的代碼)
  • 自動加載兩種方式

    • 魔術(shù)函數(shù) __autoload:系統(tǒng)自動調(diào)用,需要傳入類名,在函數(shù)內(nèi)部實現(xiàn)類的手動加載(PHP7及之后不建議使用此方法)
    function __autoload($classname){
        # 找到對應(yīng)的文件路徑和命名規(guī)范,手動加載}
    • 自定義函數(shù):自己定義類的加載實現(xiàn),然后通過 spl_autoload_register 注冊到自動加載機制(可注冊多個自動加載)
    # 自定義類加載函數(shù)function 自定義函數(shù)($classname){
        # 找到對應(yīng)的文件和命名規(guī)范,手動加載}#注冊自動加載sql_autoload_register('自定義函數(shù)名字')

自動加載要求在聲明類的時候有良好的規(guī)范

  • 類名與文件名一致:類名.php 或者 類名.class.php
  • 類文件分類放好

例:手動加載

Article.php


mian.php

getName());
    # outputstring(16) "Article::getName"

自動加載

  • __autoload(不建議使用)

一個系統(tǒng)中,可能類文件會放到不同的路徑下,因此一個完整的自動加載函數(shù),應(yīng)該要進(jìn)行文件判定功能


  • spl_autoload_register

對象克隆

通過已有的對象復(fù)制一個新的同樣的對象,但兩者之間并非同一個對象

面向?qū)ο蟾呒?/h3>

面向?qū)ο笕筇匦?/h4>

封裝、繼承、多態(tài)

類的封裝

類的繼承

inherit,子類合法擁有父類的某些權(quán)限

  • 繼承必須滿足繼承關(guān)系:即存在合理的包含關(guān)系
  • 繼承的本質(zhì)是子類通過繼承可以直接使用父類已經(jīng)存在的數(shù)據(jù)和數(shù)據(jù)操作
  • PHP 使用 extends 關(guān)鍵字表示繼承

子類也稱派生類

父類也稱基類

# 父類class Human{}# 子類繼承class Man extends Human{}

類的多態(tài)

多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果

  • 需要發(fā)生類的繼承,同時出現(xiàn)方法的重寫(override),即子類擁有與父類同名的方法
  • 在實例化對象的時候讓父類對象指向子類對象(強制類型,PHP不支持,PHP 弱類型很靈活)
  • 結(jié)果:父類對象表現(xiàn)的子類對象的特點

—PHP繼承—

show();

有限繼承

子類在繼承父類的成員時,并非繼承所有內(nèi)容,而是繼承并使用父類部分內(nèi)容

  • PHP 中繼承的本質(zhì)是對象繼承
  • PHP 中繼承的內(nèi)容:父類所有公有成員、受保護成員和私有屬性,私有方法不能繼承
  • 受保護(protected)成員專于繼承,可以在父類或者子類內(nèi)部訪問
  • 私有成員的訪問只能在所屬類中設(shè)定公有或者受保護方法實現(xiàn)訪問
  • 構(gòu)造方法和析構(gòu)方法可以被子類繼承,

重寫 Override

override,子類中定義了與父類重名的成員

parent 關(guān)鍵字

一種明確訪問父類成員的表達(dá)方式

方法被重寫后,訪問調(diào)用的是子類方法,如果想要訪問父類方法,可以通過在子類方法中使用 parent 來強制訪問父類方法

parent 不能用于訪問父類的屬性(靜態(tài)屬性可以)

PHP 繼承特點

  • PHP 只能單繼承,只有一個父類(若繼承多個類,可以使用鏈?zhǔn)嚼^承)
  • PHP 繼承中,只有私有方法不能繼承
  • PHP 允許繼承父類中的構(gòu)造方法和析構(gòu)方法

靜態(tài)延遲綁定

最終類 Final

使用 final 關(guān)鍵字修飾類名,表示此類不可以被繼承

final 關(guān)鍵字還能修飾方法,表示方法不能被重寫(通常此時類不會使用 final 關(guān)鍵字)

抽象類 Abstract

使用 abstract 關(guān)鍵字修飾的類,表示該類只能被繼承,不能被實例化

abstract 關(guān)鍵字可以修飾方法,表示方法為抽象方法,抽象方法沒有方法體(沒有{})

抽象方法存在的類必須為抽象類

繼承抽象類的類要么為抽象類,要么實現(xiàn)抽象類里所有的抽象方法

trait 代碼復(fù)用

適用于,不同類之間有公共代碼,但是類彼此關(guān)系不存在繼承關(guān)系,此時可以將公共代碼存儲到 trait 中

trait 內(nèi)部可以擁有一個類能擁有的成員屬性(包括靜態(tài)),成員方法(包括靜態(tài)和抽象方法),但不能有類常量

trait 用來代碼復(fù)用,不能被實例化,不能被繼承

trait 同名

一個類中可能需要引入多個 trait ,而不同 trait 中可能出現(xiàn)同名

接口

Interface,專門用來規(guī)范一些共性類必須實現(xiàn)的方法

  • 接口不是類,但是與類有類似的結(jié)構(gòu)
  • 接口不能實例化,類可以實現(xiàn)接口

interface 接口名字{}

class 類名 implements 接口名字{}

接口成員

接口成員只能有兩類

  • 接口常量:const
  • 共有的接口方法(普通方法和靜態(tài)方法)

PHP 重載

overload,指在一個類中可以出現(xiàn)多個同名方法,彼此之間的參數(shù)個數(shù)和類型不一樣

用來容錯

屬性重載

當(dāng)對象訪問不存在的或者權(quán)限不夠的屬性的時候,自動觸發(fā)魔術(shù)方法讓代碼不出錯

屬性重載魔術(shù)方法

  • __get(屬性名):訪問不存在或者權(quán)限不夠的屬性時觸發(fā)
  • __set(屬性名,屬性值):設(shè)置不存在或者權(quán)限不夠的屬性時觸發(fā)
  • __isset(屬性名):判定不存在或者權(quán)限不夠的屬性是觸發(fā)
  • __unset(屬性名):刪除不存在或者權(quán)限不夠的屬性時觸發(fā)
  • __tostring(): 當(dāng)作字符串

方法重載

對象或者類訪問不存在或者權(quán)限不夠的方法,自動觸發(fā)的魔術(shù)方法讓代碼不出錯

  • __cal(方法名,方法參數(shù)列表):調(diào)用不存在或者權(quán)限不夠的方法時觸發(fā)
  • __callStatic(方法名,方法參數(shù)列表):調(diào)用不存在或者權(quán)限不夠的靜態(tài)方法時觸發(fā)

對象遍歷

將對象中的所有屬性以鍵值對的形式取出并進(jìn)行訪問

  • 對象是一種復(fù)合數(shù)據(jù)類型,對象中真正保存的內(nèi)容是屬性

  • 對象的屬性本質(zhì)也是一種鍵值對關(guān)系:名字 = 值

  • 對象遍歷就是利用 foreach 對對象中的屬性進(jìn)行取出解析

  • 對象遍歷遵循訪問修飾限定符的限定:即類外只能遍歷所有共有屬性

    foreach(對象變量 as [屬性名變量 =>] 屬性值變量){
        #屬性名變量代表取出的每個屬性的名字
        #屬性值變量代表取出的每個屬性的值}

Iterator 迭代器

生成器

yield 關(guān)鍵字

設(shè)計模式

design pattern,是軟件開發(fā)人員在軟件開發(fā)過程中問題的解決方法

單例模式

singleton,是一種類的設(shè)計只會最多產(chǎn)生一個對象的設(shè)計思想

保證資源唯一性

工廠模式

。。。。。。

命名空間

namespace,指人為的將內(nèi)存進(jìn)行分隔,讓不同內(nèi)存區(qū)域的同名結(jié)構(gòu)共存,從而解決在大型項目能出現(xiàn)重名結(jié)構(gòu)問題

基礎(chǔ)語法:

namespace 關(guān)鍵字定義空間

命名規(guī)則

字母、數(shù)字、下劃線,不能以數(shù)字開頭

命名空間必須寫在所有代碼之前,定義了一個,之后可以定義多個

子空間

subspace,即在已有空間之上,再在內(nèi)部進(jìn)行空間劃分

子空間直接通過 namespace+路徑符號 \ 實現(xiàn)

非限定名稱

直接訪問元素本身,代表當(dāng)前所屬空間(當(dāng)前目錄)

限定名稱

使用空間名+原名,代表訪問當(dāng)前空間子空間(當(dāng)前目錄子目錄)

完全限定名稱

從根目錄(全局空間)開始訪問,使用 \ 作為全局空間開始符號(根目錄)

全局空間元素訪問:使用完全限定名稱訪問

命名空間引入


文章標(biāo)題:歸納總結(jié)PHP對象基礎(chǔ)
新聞來源:http://www.5511xx.com/article/dhjgdje.html