PHP介面類interface的正確使用方法

來源:互聯網
上載者:User

標籤:php   new   聲明   特徵   abstract   多重   調用   user   使用方法   

1、介面的定義:
 介面:一種成員屬性為抽象的特殊抽象類別,在程式中同為規範的作用
2、其實他們的作用很簡單,當有很多人一起開發一個項目時,可能都會去調用別人寫的一些類,那你就會問,我怎麼知道他的某個功能的實現方法是怎麼命名的呢,這個時候PHP介面類interface就起到作用了,當我們定義了一個介面類時,它裡面的方式是下面的子類必須實現的,比如 :
interface Shop  
{  
public function buy($gid);  
public function sell($gid);  
public function view($gid);  
}    
我聲明一個shop介面類,定義了三個方法:買(buy),賣(sell),看(view),那麼繼承此類的所有子類都必須實現這3個方法少一個都不行,如果子類沒有實現這些話,就無法運行。實際上介面類說白了,就是一個類的模板,一個類的規定,如果你屬於這類,你就必須遵循我的規定,少一個都不行,但是具體你怎麼去做,我不管,那是你的事,如:
 

  1. class BaseShop implements Shop  
  2. {  
  3. public function buy($gid)  
  4. {  
  5. echo(‘你購買了ID為 :‘.$gid.‘的商品‘);  
  6. }  
  7. public function sell($gid)  
  8. {  
  9. echo(‘你賣了ID為 :‘.$gid.‘的商品‘);  
  10. }  
  11. public function view($gid)  
  12. {  
  13. echo(‘你查看了ID為 :‘.$gid.‘的商品‘);  
  14. }  
  15. }  

結論 : PHP介面類interface就是一個類的領導者,指明方向,子類必須完成它指定方法。這樣不同的開發人員就不要去瞭解別人怎麼命名相應的方法。
3、php中使用介面(interface)實現多重繼承:
我們都知道PHP中的類(class)是單繼承的,那是不是就沒有辦法實現多重繼承了呢?答案是否定的.我們可以通過其它特殊的方式實作類別的多重繼承,比如使用介面(interface)實現,只要把類的特徵抽象為介面,並通過實現介面的方式讓對象有多重身份,通過這樣就可以類比多重繼承了。
下面是一個用介面(interface)實現多重繼承的例子,原始碼如下:
<?php
interface UserInterface{ //定義User的介面
function getname();
}
interface TeacherInterface{ //teacher相關介面
function getLengthOfService();
}
class User implements UserInterface { //實現UserInterface介面
private $name = "tom";
public function getName(){
return $this->name;
}
}
class Teacher implements TeacherInterface { //實現TeacherInterface介面
private $lengthOfService = 5; // 工齡
public function getLengthOfService(){
return $this->lengthOfService;
}
}
// 繼承自User類,同時實現了TeacherInterface介面.
class GraduateStudent extends User implements TeacherInterface {
private $teacher ;
public function __construct(){
$this->teacher = new Teacher();
}
public function getLengthOfService(){
return $this->teacher->getLengthOfService();
}
}
class Act{
//注意這裡的類型提示改成了介面類型
public static function getUserName(UserInterface $_user){
echo "Name is " . $_user->getName() ."<br>";
}
//這裡的類型提示改成了TeacherInterface類型.
public static function getLengthOfService(TeacherInterface $_teacher){
echo "Age is " .$_teacher->getLengthOfService() ."<br>";
}
}
$graduateStudent = new GraduateStudent();
Act::getUserName($graduateStudent);
Act::getLengthOfService($graduateStudent);
//結果正如我們所要的,實現了有多重身份的一個對象.
?>
樣本運行結果如下:
Name is tom
Age is 5
4、介面類和抽象類別的區別
 抽象類別 :1.類中至少有一個抽象方法
              2.前面加abstract
 介面: 1.成員屬性為常量const
         2.前面不用加abstract
         3.類中全部為抽象方法,介面抽象方法為public
5、介面類和抽象類別 共同點:
      1.本身不能被執行個體化,必須繼承或者引用
      2.繼承和引用後,抽象方法必須重載才能執行個體化
     關鍵字 interface.引用關鍵字 implements

PHP介面類interface的正確使用方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.