站長資訊網
        最全最豐富的資訊網站

        PHP面向對象之抽象類詳解(代碼實例)

        本文目標:

        1、了解PHP中抽象類的定義

        2、了解PHP中抽象類的作用

        3、了解PHP中抽象類的使用場景

        4、掌握PHP中抽象類的具體實現

        還是按照之前一貫的思路,我們通過3W1H的方式進行學習,那么首先我們來了解一下

        (一)、了解PHP中抽象類的定義(What)

        抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在編程語句中用 abstract 修飾的類是抽象類

        和接口的不同之處在于,接口中的方法都是不實現的,只是單純的定義,但是抽象類中的方法是可以實現的。

        (二)、了解PHP中抽象類的作用(Why)

        在PHP中的類當中,有很多類會被不斷的重寫,這個時候我們可以使用抽象類,怎么做呢?就是先寫一個公共的類,然后實例化之后我們可以重復去調用。這樣可以提高代碼的可重用性

        (三)、了解PHP中抽象類的使用場景(Where)

        1、如果發現代碼中很多類都有相似或者共同的方法,我們可以把這些相同或者相似的方法抽離出來,封裝到抽象類中。

        抽象類和接口有點相似,可以這么說,接口是一個特殊的抽象類,只不過接口里面全都是抽象的方法,(所謂抽象就是沒有具體的實現),但是抽象類中的部分方法,是可以具備實現的功能,

        (四)、掌握PHP中抽象類的具體實現(How)

        總結:

        1、抽象類的定義通過abstract 定義,比如abstract class 類名{}

        2、抽象類的方法的定義也是通過abstract定義,比如abstract public function 方法名(){}

        3、抽象類是不能被實例化的

        4、要繼承一個抽象類,通過關鍵字extends

        5、抽象類的子類必須要實現抽象類中未實現的所有方法,也就是說要重寫抽象類中所有abstract的方法

        6、抽象類的子類雖然沒有實現抽象類中的已經實現的方法,一樣可以調用這些方法,其實結合繼承我們可以很好理解這點

        每個總結都是通過實踐得出來的,現在我們用實踐來演示總結,這樣可以促進理解,讓每個總結理解起來更加清晰,直觀

        (五)、具體代碼

        案例一、

        實踐目標:

        1、抽象類的定義通過abstract 定義,比如abstract class 類名{}

        2、抽象類的方法的定義也是通過abstract定義,比如abstract public function 方法名(){}

        具體代碼如下:

        <?php abstract class Animal{     abstract public function eat();//抽象方法     //呼吸     public function breath(){         //所有動物的呼吸方法都是一樣的,就不需要使用多態了         echo "呼吸<br/>";     } } ?>

        案例二、

        實踐目標:

        1、抽象類是不能被實例化的

        具體代碼如下:

        <?php abstract class Animal{     abstract public function eat();//抽象方法     //呼吸     public function breath(){         //所有動物的呼吸方法都是一樣的,就不需要使用多態了         echo "呼吸<br/>";     } } $animal = new Animal(); ?>

        運行結果為:

        Fatal error: Uncaught Error: Cannot instantiate abstract class Animal in D:E-classclass-codeclassingindex.php:10 Stack trace: #0 {main} thrown in D:E-classclass-codeclassingindex.php on line 10

        案例四、

        實踐目標:

        1、要繼承一個抽象類,通過關鍵字extends

        2、抽象類的子類必須要實現抽象類中未實現的所有方法,也就是說要重寫抽象類中所有abstract的方法

        具體代碼如下:

        <?php abstract class Animal{     abstract public function eat();//抽象方法     //呼吸     public function breath(){         //所有動物的呼吸方法都是一樣的,就不需要使用多態了         echo "呼吸<br/>";     } } //定義猴子 class Monkey extends Animal{      } ?>

        如果Monkey類繼承了抽象類,但不實現里面的abstract方法,那么運行結果為:

        Fatal error: Class Monkey contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Animal::eat) in D:E-classclass-codeclassingindex.php on line 13

        接下來我們來實現abstract方法

        具體代碼如下:

        <?php abstract class Animal{     abstract public function eat();//抽象方法     //呼吸     public function breath(){         //所有動物的呼吸方法都是一樣的,就不需要使用多態了         echo "呼吸<br/>";     } } //定義猴子 class Monkey extends Animal{     //實現抽象類中的抽象方法     public function eat(){         echo "我是猴子類中的eat方法<br/>";     } } $monkey = new Monkey(); $monkey->eat();  ?>

        運行結果如下:

        我是猴子類中的eat方法

        案例五、

        實踐目標:

        1、抽象類的子類雖然沒有實現抽象類中的已經實現的方法,一樣可以調用這些方法,其實結合繼承我們可以很好理解這點

        具體代碼如下:

        <?php abstract class Animal{     abstract public function eat();//抽象方法     //呼吸     public function breath(){         //所有動物的呼吸方法都是一樣的,就不需要使用多態了         echo "抽象類中的呼吸方法<br/>";     } } //定義猴子 class Monkey extends Animal{     //實現抽象類中的抽象方法     public function eat(){         echo "我是猴子類中的eat<br/>";     } } $monkey = new Monkey(); $monkey->eat(); $monkey->breath(); ?>

        運行結果如下:

        我是猴子類中的eat
        抽象類中的呼吸方法

        (六)、學以致用

        問題:將以下真實場景,用抽象類還原出來

        小芳放學回到家中,一進家門,只見心愛的小狗“小愛”馬上就對主人搖起了尾巴,小芳笑了笑,走過去,抱起了小狗,最后,小芳和小狗親了一口

        思路分析:

        1、對象分析:學生,小狗

        2、對象屬性分析:結合(現實世界+具體場景)

        學生:名稱

        狗:名稱

        3、對象方法分析:結合(現實世界+具體場景)

        學生:

        (1)、放學

        (2)、回到家中

        (3)、走路

        (4)、看

        (5)、笑

        (6)、抱東西

        (7)、親嘴

        狗:

        (1)、看

        (2)、搖尾巴

        (3)、親嘴

        4、我們發現這2個對象都有相似的方法,看,親嘴,所以我們可以把它們封裝到抽象類中,并且這2個方法不需要子類去重寫,因為都是一樣的

        具體代碼如下:

        <?php abstract class Animal{     //看     public function look($obj){         //所有動物的呼吸方法都是一樣的,就不需要使用多態了         echo "看見了".$obj->name."<br/>";     }     //親嘴     public function kiss($fromobj,$toobj){         echo $fromobj->name."親了".$toobj->name."一口<br/>";     }      } //學生 class Student extends Animal{    public $name = "";    public function __construct( $name ){        $this->name = $name;    }     // 1、放學    public function offschool(){        echo $this->name."放學了<br/>";    }    //回家    public function goHome(){     echo $this->name."回到家中<br/>";    }     // 2、走路     public function walk(){         echo $this->name."走了過去<br/>";     }     // 3、看      // 4、笑     public function smile(){         echo $this->name."微笑了<br/>";     }     // 5、抱東西     public function hug($obj){         echo $this->name."抱起了".$obj->name."<br/>";     }     // 6、親嘴     } //狗 class Dog extends Animal{    public $name = "";    public function __construct( $name ){        $this->name = $name;    }     //1、看      //2、搖尾巴     public function wagTail(){         echo $this->name."搖了尾巴<br/>";     }      //3、親嘴 } //創建對象 $xf = new Student("小芳"); $dog = new Dog("小愛"); //小芳放學了 $xf->offschool(); //小芳放學回到家中,一進家門,只見心愛的小狗“小愛”馬上就對主人搖起了尾巴,小芳笑了笑,走過去, //抱起了小狗,最后,小芳和小狗親了一口 //小芳回答家中 $xf->goHome(); //小芳看見小狗 $xf->look($dog); //小狗搖尾巴 $dog->wagTail(); //小芳笑了笑 $xf->smile(); //小芳走過去 $xf->walk(); //抱起小狗 $xf->hug($dog); //小芳親了小狗 $xf->kiss($xf,$dog); //小狗也親了小芳 $dog->kiss($dog,$xf); ?>

        運行結果為:

        小芳放學了
        小芳回到家中
        看見了小愛
        小愛搖了尾巴
        小芳微笑了
        小芳走了過去
        小芳抱起了小愛
        小芳親了小愛一口
        小愛親了小芳一口

        (七)、總結

        1、本文主要講解了PHP中抽象類的定義,作用以及具體的實現

        希望本文能給大家帶來一定的幫助,謝謝!!!

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 欧美日韩国产精品| 全国精品一区二区在线观看| 久久久久夜夜夜精品国产| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 无码国模国产在线无码精品国产自在久国产 | 国产精品欧美久久久久天天影视 | 99久久国产主播综合精品| 国产精品igao视频网| 亚洲精品无码专区久久久| 欧美日韩国产精品| 久久精品国产一区二区三区不卡| 亚洲精品在线观看视频| 国产成人精品无码免费看| 日产精品久久久久久久性色| 亚洲精品国产日韩无码AV永久免费网 | 久久精品国产99国产精偷 | 久久精品一区二区国产| 国产精品美女久久久久网| 久久久久女人精品毛片| 日本伊人精品一区二区三区| 最新国产成人精品2024| 亚洲精品一级无码鲁丝片| 亚洲A∨午夜成人片精品网站| 国产伦精品一区二区三区视频猫咪 | 九色精品视频在线观看| 国产激情精品一区二区三区| 亚洲国产精品久久久久网站| 亚洲第一精品在线视频| 最新国产精品亚洲| 久久这里只有精品久久| 真实国产乱子伦精品免费| 91国内揄拍国内精品对白不卡 | 99热成人精品热久久669| freesexvideos精品老师毛多| 日韩精品无码专区免费播放| 亚洲精品白浆高清久久久久久| 亚洲精品无码久久久久久| 无码精品A∨在线观看中文| 久久国产精品无码一区二区三区 | 精品无码AV无码免费专区| 国产中老年妇女精品|