這篇文章主要介紹“PHP中的抽象類與接口詳細(xì)介紹”,在日常操作中,相信很多人在PHP中的抽象類與接口詳細(xì)介紹問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”PHP中的抽象類與接口詳細(xì)介紹”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、達(dá)孜ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的達(dá)孜網(wǎng)站制作公司
抽象類的特點(diǎn):
abstract class A {
public function show(){
$this->getName();
echo PHP_EOL;
}
protected abstract function getName();
public abstract function getAge($age);
}
class ChildA1 extends A {
public function getName(){
echo "I'm ChildA1";
}
public function getAge($age){
echo "Age is " . $age;
}
}
class ChildA2 extends A {
protected function getName(){
echo "I'm ChildA2";
}
public function getAge($age, $year = ''){
echo "Age is ". $age . ', bron ' . $year;
}
}
$ca1 = new ChildA1();
$ca1->show();
$ca1->getAge(18);
$ca2 = new ChildA2();
$ca2->show();
$ca2->getAge(20, 2000);
接口的特點(diǎn):
interface B1 {
const B1_NAME = 'Interface B1';
function getName();
function getAge($age);
}
interface B2 extends B1 {
function show();
}
interface B3 {
function getSchool();
}
class ChildB implements B2, B3{
function getName(){
echo "I'm ChildB";
}
function getAge($age, $year = ''){
echo "Age is " . $age;
}
function show(){
$this->getName();
echo PHP_EOL;
$this->getAge(23, 1997);
echo PHP_EOL;
echo self::B1_NAME;
echo PHP_EOL;
}
function getSchool(){
echo "study in Peking University";
echo PHP_EOL;
}
}
$b = new ChildB();
$b->show();
$b->getSchool();
從上面我們可以總結(jié)出一些抽象類和接口的區(qū)別:
那么問(wèn)題來(lái)了,這兩貨哪個(gè)好?抱歉,這個(gè)問(wèn)題可沒(méi)有答案,它們的作用不同。抽象類可以作為基類,為子類提供公共方法,并定制公共的抽象讓子類來(lái)實(shí)現(xiàn)。而接口則是更高層次的抽象,它可以讓我們依賴于抽象而不是具體的實(shí)現(xiàn),為軟件開(kāi)發(fā)帶來(lái)更多的擴(kuò)展性。
接口,實(shí)際上也可以看做是一種契約。我們經(jīng)常會(huì)拿電腦主機(jī)箱后面的插口來(lái)說(shuō)明。比如USB接口,我們定義了它的大小,里面的線路格式,不管你插進(jìn)來(lái)的是什么,我們都可以連通。而具體的實(shí)現(xiàn)則是取決于電腦軟件對(duì)插入的硬件的解釋,比如U盤就會(huì)去讀取它里面的內(nèi)容,而鍵盤則會(huì)識(shí)別為一個(gè)外設(shè)。
從這里可以看出,接口能夠?yàn)槲覀兂绦虻臄U(kuò)展提供非常強(qiáng)大的支撐。任何面向?qū)ο笳Z(yǔ)言中接口都是非常重要的特性。下面我們來(lái)用接口模擬剛剛說(shuō)的USB插口。
interface USB{
function run();
}
class Keyboard implements USB{
function run(){
echo "這是鍵盤";
}
}
class UDisk implements USB{
function run(){
echo "這是U盤";
}
}
這么寫有什么好處呢?我們?cè)偕钊胍粋€(gè)概念:依賴注入。如果使用面向接口開(kāi)發(fā)的話:
function testUSB (USB $u){
$u->run();
}
// 插入U(xiǎn)盤
testUSB(new UDisk);
// 插入鍵盤
testUSB(new Keyboard);
testUSB方法中的$u并不是某個(gè)具體實(shí)例,只是USB接口的抽象,在不知道它是什么實(shí)例的情況下我們通過(guò)接口契約,保證它一定會(huì)有一個(gè)run()方法。而具體的實(shí)現(xiàn),則是在外部我們調(diào)用方法的時(shí)候注入進(jìn)來(lái)的。
掌握好接口的設(shè)計(jì)原則,往往就能看懂一大半的框架的設(shè)計(jì)思想。這也是我們面向?qū)ο笾凶钭罨A(chǔ)的特性。抽象類作為公共基類來(lái)說(shuō)可以為多態(tài)提供比較好的范本,它能夠讓你的子類有自己的個(gè)性又能使用父類的能力??傊?,深入場(chǎng)景業(yè)務(wù),選擇合適的方式實(shí)現(xiàn)代碼,靠的是能力、經(jīng)驗(yàn)與智慧的綜合,決不是一句誰(shuí)好誰(shuí)不好所能定性的。
測(cè)試代碼:https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/%E7%8E%A9%E8%BD%ACPHP%E4%B8%AD%E7%9A%84%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3.php
參考文檔:https://www.php.net/manual/zh/language.oop5.abstract.phphttps://www.php.net/manual/zh/language.oop5.interfaces.phphttps://www.php.net/manual/zh/language.oop5.interfaces.php#79110
到此,關(guān)于“PHP中的抽象類與接口詳細(xì)介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
當(dāng)前題目:PHP中的抽象類與接口詳細(xì)介紹
鏈接分享:http://chinadenli.net/article10/gphhgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、手機(jī)網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)、域名注冊(cè)、定制開(kāi)發(fā)、Google
聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)