php 多態與介面學習實現與執行個體代碼

來源:互聯網
上載者:User

php教程5中,變數的類型是不確定的,一個變數可以指向任何類型的數值、字串、對象、資源等。我們無法說php5中多態的是變數。

我們只能說在php5中,多態應用在方法參數的類型提示位置。

一個類的任何子類對象都可以滿足以當前類型作為類型提示的類型要求。所有實現這個介面的類,都可以滿足以介面類型作為類型提示的方法參數要求。簡單的說,一個類擁有其父類、和已實現介面的身份

通過實現介面實現多態
下面的例子中,useradmin類的靜態方法,要求一個user類型的參數。

在後面的使用中,傳遞了一個實現了user介面的類normaluser的執行個體。代碼成功運行。

<?
interface user{ // user介面
 public function  getname();
 public function setname($_name);
}

class normaluser implements user { // 實現介面的類.
 private $name;
 public function getname(){
  return $this->name;
 }
 public function setname($_name){
  $this->name = $_name;
 }
}

class useradmin{ //操作.
 public static function  changeusername(user $_user,$_username){
  $_user->setname($_username);
 }
}

$normaluser = new normaluser();
useradmin::changeusername($normaluser,"tom");//這裡傳入的是 normaluser的執行個體.
echo $normaluser->getname();
?>


php 介面類:interface

其實他們的作用很簡單,當有很多人一起開發一個項目時,可能都會去調用別人寫的一些類,那你就會問,我怎麼知道他的某個功能的實現方法是怎麼命名的呢,這個時候php介面類就起到作用了,當我們定義了一個介面類時,它裡面的方式是下面的子類必須實現的,比如 :

代碼如下:

interface shop
{
public function buy($gid);
public function sell($gid);
public function view($gid);
}

我聲明一個shop介面類,定義了三個方法:買(buy),賣(sell),看(view),那麼繼承此類的所有子類都必須實現這3個方法少一個都不行,如果子類沒有實現這些話,就無法運行。實際上介面類說白了,就是一個類的模板,一個類的規定,如果你屬於這類,你就必須遵循我的規定,少一個都不行,但是具體你怎麼去做,我不管,那是你的事,如:

代碼如下:

class baseshop implements shop
{
public function buy($gid)
{
echo('你購買了id為 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你賣了id為 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了id為 :'.$gid.'的商品');
}
}


下面縮一下方法

<?php 
interface myusbkou 

    function type();//類型 
    function action();//執行的操作 

class zip implements myusbkou 
{  //繼承介面 
    function type()
    { 
        echo "usb的2.0介面"; 
    } 
    function action()
    { 
        echo "--->需要usb 2.0驅動"; 
    } 

class mp3 implements myusbkou

    function type() 
    { 
     echo "mp3的1.0介面"; 
    } 
    function action() 
    { 
     echo "--->需要mp3 1.0驅動<br/>"; 
    } 

class mypc

    function usbthing($thing) 
    { 
        $thing->type(); 
        $thing->action(); 
    } 

$p=new mypc(); 
$mp3=new mp3(); 
$zip=new zip(); 
$p->usbthing($mp3); 
$p->usbthing($zip); 
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.