PHP面向?qū)ο缶幊蹋∣OP)

    關(guān)于面向?qū)ο缶幊蘋OP的總結(jié)

    面向?qū)ο缶幊?OOP)引入了相當(dāng)多的特性,使編程變得更加復(fù)雜.

    封裝,繼承,多態(tài)是OOP的三要素,這些是過程式中的函數(shù)所沒有的.

    具體體現(xiàn)在:

    • 1.封裝: class/interface/public/protected/private
    • 2.繼承: extends/implements
    • 3.多態(tài): 方法重寫/方法重載

    新增的class和interface加入了新的變量作用域,即類和接口里代碼塊是函數(shù)所沒有的作用域.

    在這個作用域里,可以定義變量和函數(shù)這些類和接口的成員,并且支持使用public/protected/private關(guān)鍵字對這些成員進行訪問控制.比如public表示允許外部訪問,protected表示允許類及其子類訪問,private表示只允許所在類內(nèi)部訪問。

    而且OOP還引入了方法重寫和方法重載這些多態(tài)特性,即:

    • 方法重寫:參數(shù)列表相同,方法體不同.
    • 方法重載:參數(shù)列表不同,方法體不同.

    方法重寫依賴?yán)^承,是子類的方法覆蓋父類的方法,要求方法名和參數(shù)列表相同.

    方法重載不依賴?yán)^承,是同一個類中的兩個或兩個以上的同名方法,參數(shù)列表不同。

    需要注意的是繼承并重寫的方法只能維持或放大訪問權(quán)限,不能縮小.

    比如父類protected方法在子類重載為public是可行的.

    在PHP中,因為不允許存在多個同名方法,所以不支持C++/Java那樣的方法重載.

    但PHP提供了魔術(shù)方法(__call,__callStatic)用于間接實現(xiàn)方法重載.

    PHP中方法重寫并不要求參數(shù)相同.

    PHP不支持多重繼承(繼承多個父類),但可以實現(xiàn)多個接口,也可以用trait特性間接支持多重繼承.

    功能一覽

    <?php
    
        class A{//創(chuàng)建類A
    
    
    //構(gòu)造函數(shù)與析構(gòu)函數(shù)
    
    
                //構(gòu)造函數(shù) - 在創(chuàng)建對象時初始化對象, 即為對象成員變量賦初始值
                function __construct() {
                    print "構(gòu)造函數(shù)n<br />";
                    $this->name = "我是默認值<br />";
                }
    
                //析構(gòu)函數(shù) - 當(dāng)對象結(jié)束其生命周期時(例如對象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動執(zhí)行析構(gòu)函數(shù)。
                function __destruct() {
                    print "銷毀 " . $this->name . "n<br />";
                }
    
    
    //基礎(chǔ)元素
                //創(chuàng)建屬性
                public $a_a;
                public $a_b='a_b';
                //創(chuàng)建af方法
                function af() {}
    
                //創(chuàng)建常量
                const constant = '常量值<br />';
                function showConstant() {
                    echo  self::constant . PHP_EOL;//打印常量,并加空格(代碼中)
                }
    
    
    
    //訪問權(quán)限
    
    
                //公有的類成員可以在任何地方被訪問。
                public $public = 'Public';
    
                //受保護的類成員則可以被其自身以及其子類和父類訪問。
                protected $protected = 'Protected';
    
                //私有的類成員則只能被其定義所在的類訪問。
                private $private = 'Private';
    
    
                // 聲明一個公有的方法
                public function MyPublic() { }
    
                // 聲明一個受保護的方法
                protected function MyProtected() { }
    
                // 聲明一個私有的方法
                private function MyPrivate() { }
    
    
    //靜態(tài)
                //創(chuàng)建一個公開的靜態(tài)方法
                public static function aStaticMethod() {
                    // ...
                   echo "Hello<br />";
                }
    
                //創(chuàng)建公開的靜態(tài)屬性
                public static $my_static = 'foo<br />';
                public function staticValue() {
                        return self::$my_static;
                }
    
    
    
    
    
    
    }
    
    class B extends A {//類B繼承類A
    
    }
    
    //實例化A類 - 可供使用的對象()
    $class_a = 'A';
    $a = new $class_a();
    
    //B類的實例化 - 可供使用的對象
    $b = new B;
    
    //打印HelloHello
    A::aStaticMethod();
    $a::aStaticMethod();//上面已實例化過
    
    ?>

    名詞解釋

    class

    • 每個類的定義都以關(guān)鍵字?class?開頭,后面跟著類名,后面跟著一對花括號,里面包含有類的屬性與方法的定義。
    • 類名可以是任何非 PHP?保留字?的合法標(biāo)簽。一個合法類名以字母或下劃線開頭,后面跟著若干字母,數(shù)字或下劃線。以正則表達式表示為:?^[a-zA-Z_x80-xff][a-zA-Z0-9_x80-xff]*$
    • 一個類可以包含有屬于自己的?常量變量(稱為“屬性”)以及函數(shù)(稱為“方法”)。
    • 當(dāng)一個方法在類定義內(nèi)部被調(diào)用時,有一個可用的偽變量?$this$this?是一個到當(dāng)前對象的引用。

    new

    要創(chuàng)建一個類的實例,必須使用?new?關(guān)鍵字

    屬性和方法

    類的屬性和方法存在于不同的“命名空間”中,這意味著同一個類的屬性和方法可以使用同樣的名字。 在類中訪問屬性和調(diào)用方法使用同樣的操作符,具體是訪問一個屬性還是調(diào)用一個方法,取決于你的上下文,即用法是變量訪問還是函數(shù)調(diào)用。

    extends

    • 一個類可以在聲明中用?extends?關(guān)鍵字繼承另一個類的方法和屬性。PHP 不支持多重繼承,一個類只能繼承一個基類。
    • 被繼承的方法和屬性可以通過用同樣的名字重新聲明被覆蓋。

    ::class

    關(guān)鍵詞?class?也可用于類名的解析。使用?ClassName::class?可以獲取包含類?ClassName?的完全限定名稱。

    簽名兼容性規(guī)則

    實例

    轉(zhuǎn)一段王垠關(guān)于OOP的論述:

    “對象思想”作為數(shù)據(jù)訪問的方式,是有一定好處的。 然而“面向?qū)ο蟆保ǘ嗔恕懊嫦颉眱蓚€字),就是把這種本來良好的思想東拉西扯,牽強附會,發(fā)揮過了頭。 很多面向?qū)ο笳Z言號稱“所有東西都是對象”,把所有函數(shù)都放進所謂對象里面,叫做“方法”,把普通的函數(shù)叫做“靜態(tài)方法”。 實際上只有極少需要抽象的時候,需要使用內(nèi)嵌于對象之內(nèi),跟數(shù)據(jù)緊密結(jié)合的“方法”。 其他的時候,你其實只是想表達數(shù)據(jù)之間的變換操作,這些完全可以用普通的函數(shù)表達,而且這樣做更加簡單和直接。 把所有函數(shù)放進對象的做法是本末倒置的,因為函數(shù)本身并不屬于對象,它們只是對象上面的變換操作。 絕大部分函數(shù)是獨立于對象的,它們不能被叫做“方法”。 強制把所有函數(shù)放進它們本來不屬于的對象里面,把它們?nèi)甲鳛椤胺椒ā保瑢?dǎo)致了面向?qū)ο蟠a邏輯過度復(fù)雜。 很簡單的想法,非得繞好多道彎子才能表達清楚。 很多人至今不知道自己所用的“面向?qū)ο笳Z言”里面的很多優(yōu)點,都是從過程式語言繼承來的。

    原文來源:

    php

    抽象類 - PHP面向?qū)ο缶幊蹋∣OP)

    2022-8-24 17:19:31

    php

    Static(靜態(tài))與Final(終止)關(guān)鍵字 - PHP面向?qū)ο缶幊蹋∣OP)

    2022-8-25 11:41:08

    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無意侵害您的權(quán)益,請發(fā)送郵件至 1355471563#qq.com 或點擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    0 條回復(fù) A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優(yōu)惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 国产无码一区二区在线| 亚洲成人一区二区| 亚洲av无码一区二区三区四区 | 免费一区二区无码视频在线播放 | 老熟妇高潮一区二区三区| 动漫精品一区二区三区3d| 亚洲一区电影在线观看| 久久精品无码一区二区app| 亚洲A∨精品一区二区三区下载| 国产激情з∠视频一区二区| 精品一区二区三区视频| 亚洲AV日韩综合一区| 无码国产精品一区二区免费16| 国产精品亚洲一区二区麻豆| 中文字幕一区二区三区在线不卡 | 日本免费一区二区在线观看| 成人免费一区二区三区| 日韩精品一区二区午夜成人版| 亚州AV综合色区无码一区| 在线精品国产一区二区| 精品亚洲综合在线第一区| 一区二区三区中文| 波多野结衣一区二区三区高清在线 | 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 精品一区二区三区在线观看l | 精品视频一区二区三三区四区| 波多野结衣一区在线观看| 国产日韩视频一区| 视频一区视频二区制服丝袜| 国产天堂在线一区二区三区| 波多野结衣一区二区三区高清av| 日韩人妻无码免费视频一区二区三区| 91精品国产一区| 久久毛片一区二区| 在线免费视频一区二区| 国产精品美女一区二区| 一区二区三区免费在线视频| 日韩精品无码久久一区二区三 | 日韩在线一区视频| 亚洲av无码成人影院一区| 在线视频精品一区|