(一)、PHP中抽象類的定義(What)
我們提供的服務有:網站設計制作、成都做網站、微信公眾號開發、網站優化、網站認證、富源ssl等。為成百上千企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的富源網站制作公司抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。通常在編程語句中用 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-class\class-code\classing\index.php:10 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.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-class\class-code\classing\index.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中抽象類的定義,作用以及具體的實現
希望本文能給大家帶來一定的幫助,謝謝!!!
以上就是PHP面向對象之抽象類詳解(代碼實例)的詳細內容,更多請關注創新互聯其它相關文章!
本文題目:PHP面向對象中抽象類的介紹和用法-創新互聯
本文來源:http://vcdvsql.cn/article10/didpgo.html
成都網站建設公司_創新互聯,為您提供網站排名、響應式網站、網站改版、做網站、網頁設計公司、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯