您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP中的抽象類與接口詳細介紹”,在日常操作中,相信很多人在PHP中的抽象類與接口詳細介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP中的抽象類與接口詳細介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
抽象類的特點:
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);
接口的特點:
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();
從上面我們可以總結出一些抽象類和接口的區別:
那么問題來了,這兩貨哪個好?抱歉,這個問題可沒有答案,它們的作用不同。抽象類可以作為基類,為子類提供公共方法,并定制公共的抽象讓子類來實現。而接口則是更高層次的抽象,它可以讓我們依賴于抽象而不是具體的實現,為軟件開發帶來更多的擴展性。
接口,實際上也可以看做是一種契約。我們經常會拿電腦主機箱后面的插口來說明。比如USB接口,我們定義了它的大小,里面的線路格式,不管你插進來的是什么,我們都可以連通。而具體的實現則是取決于電腦軟件對插入的硬件的解釋,比如U盤就會去讀取它里面的內容,而鍵盤則會識別為一個外設。
從這里可以看出,接口能夠為我們程序的擴展提供非常強大的支撐。任何面向對象語言中接口都是非常重要的特性。下面我們來用接口模擬剛剛說的USB插口。
interface USB{
function run();
}
class Keyboard implements USB{
function run(){
echo "這是鍵盤";
}
}
class UDisk implements USB{
function run(){
echo "這是U盤";
}
}
這么寫有什么好處呢?我們再深入一個概念:依賴注入。如果使用面向接口開發的話:
function testUSB (USB $u){
$u->run();
}
// 插入U盤
testUSB(new UDisk);
// 插入鍵盤
testUSB(new Keyboard);
testUSB方法中的$u并不是某個具體實例,只是USB接口的抽象,在不知道它是什么實例的情況下我們通過接口契約,保證它一定會有一個run()方法。而具體的實現,則是在外部我們調用方法的時候注入進來的。
掌握好接口的設計原則,往往就能看懂一大半的框架的設計思想。這也是我們面向對象中最最基礎的特性。抽象類作為公共基類來說可以為多態提供比較好的范本,它能夠讓你的子類有自己的個性又能使用父類的能力。總之,深入場景業務,選擇合適的方式實現代碼,靠的是能力、經驗與智慧的綜合,決不是一句誰好誰不好所能定性的。
測試代碼: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
到此,關于“PHP中的抽象類與接口詳細介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。