PHP面向?qū)ο笾谐橄箢惖慕榻B和用法-創(chuàng)新互聯(lián)

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

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、富源ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的富源網(wǎng)站制作公司

抽象類往往用來表征對(duì)問題領(lǐng)域進(jìn)行分析、設(shè)計(jì)中得出的抽象概念,是對(duì)一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。通常在編程語(yǔ)句中用 abstract 修飾的類是抽象類。

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

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

在PHP中的類當(dāng)中,有很多類會(huì)被不斷的重寫,這個(gè)時(shí)候我們可以使用抽象類,怎么做呢?就是先寫一個(gè)公共的類,然后實(shí)例化之后我們可以重復(fù)去調(diào)用。這樣可以提高代碼的可重用性

(三)、PHP中抽象類的使用場(chǎng)景(Where)

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

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

(四)、PHP中抽象類的具體實(shí)現(xiàn)(How)

總結(jié):

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

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

3、抽象類是不能被實(shí)例化的

4、要繼承一個(gè)抽象類,通過關(guān)鍵字extends

5、抽象類的子類必須要實(shí)現(xiàn)抽象類中未實(shí)現(xiàn)的所有方法,也就是說要重寫抽象類中所有abstract的方法

6、抽象類的子類雖然沒有實(shí)現(xiàn)抽象類中的已經(jīng)實(shí)現(xiàn)的方法,一樣可以調(diào)用這些方法,其實(shí)結(jié)合繼承我們可以很好理解這點(diǎn)

每個(gè)總結(jié)都是通過實(shí)踐得出來的,現(xiàn)在我們用實(shí)踐來演示總結(jié),這樣可以促進(jìn)理解,讓每個(gè)總結(jié)理解起來更加清晰,直觀

(五)、具體代碼

案例一、

實(shí)踐目標(biāo):

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

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

具體代碼如下:

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

案例二、

實(shí)踐目標(biāo):

1、抽象類是不能被實(shí)例化的

具體代碼如下:

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

運(yùn)行結(jié)果為:

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

案例四、

實(shí)踐目標(biāo):

1、要繼承一個(gè)抽象類,通過關(guān)鍵字extends

2、抽象類的子類必須要實(shí)現(xiàn)抽象類中未實(shí)現(xiàn)的所有方法,也就是說要重寫抽象類中所有abstract的方法

具體代碼如下:

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

如果Monkey類繼承了抽象類,但不實(shí)現(xiàn)里面的abstract方法,那么運(yùn)行結(jié)果為:

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

接下來我們來實(shí)現(xiàn)abstract方法

具體代碼如下:

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

?>

運(yùn)行結(jié)果如下:

我是猴子類中的eat方法

案例五、

實(shí)踐目標(biāo):

1、抽象類的子類雖然沒有實(shí)現(xiàn)抽象類中的已經(jīng)實(shí)現(xiàn)的方法,一樣可以調(diào)用這些方法,其實(shí)結(jié)合繼承我們可以很好理解這點(diǎn)

具體代碼如下:

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

運(yùn)行結(jié)果如下:

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

(六)、學(xué)以致用

問題:將以下真實(shí)場(chǎng)景,用抽象類還原出來

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

思路分析:

1、對(duì)象分析:學(xué)生,小狗

2、對(duì)象屬性分析:結(jié)合(現(xiàn)實(shí)世界+具體場(chǎng)景)

學(xué)生:名稱

狗:名稱

3、對(duì)象方法分析:結(jié)合(現(xiàn)實(shí)世界+具體場(chǎng)景)

學(xué)生:

(1)、放學(xué)

(2)、回到家中

(3)、走路

(4)、看

(5)、笑

(6)、抱東西

(7)、親嘴

狗:

(1)、看

(2)、搖尾巴

(3)、親嘴

4、我們發(fā)現(xiàn)這2個(gè)對(duì)象都有相似的方法,看,親嘴,所以我們可以把它們封裝到抽象類中,并且這2個(gè)方法不需要子類去重寫,因?yàn)槎际且粯拥?/p>

具體代碼如下:

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

運(yùn)行結(jié)果為:

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

(七)、總結(jié)

1、本文主要講解了PHP中抽象類的定義,作用以及具體的實(shí)現(xiàn)

希望本文能給大家?guī)硪欢ǖ膸椭?,謝謝!??!

以上就是PHP面向?qū)ο笾橄箢愒斀猓ùa實(shí)例)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

本文題目:PHP面向?qū)ο笾谐橄箢惖慕榻B和用法-創(chuàng)新互聯(lián)
本文來源:http://bm7419.com/article10/didpgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、響應(yīng)式網(wǎng)站網(wǎng)站改版、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作