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);
?>