PHP面向對象編程學習之二

接口

接口就是把不同類的共同行為經行瞭定義,然後在不同的類裡面實現不同功能。當有很多人一起開發一個項目時,可能都會去調用別人寫的一些類,那你就會問,我怎麼知道他的某個功能的實現方法是怎麼命名的呢,這個時候PHP接口類interface就起到作用瞭,當我們定義瞭一個接口類時,它裡面的方式是下面的子類必須實現的,比如 :


多態
因為接口的實現方法可以有很多,所以對於接口裡面頂一頂方法的具體實現是多種多樣,這種特性稱為多態。多態是指在面向對象中能夠根據使用類的上下文來重新定義或改變類的性質和行為。
PHP不支持重載實現多態,但是PHP可以變向的實現多態效果。
案例一:

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

案例二:


抽象類
抽象類是介於接口與類的定義之間
PHP5支持抽象類和抽象方法。抽象類不能直接被實例化,你必須先繼承該抽象類,然後再實例化子類。抽象類中 至少要包含一個抽象方法。如果類方法被聲明為抽象的,那麼其中就不能包括具體的功能實現。
繼承一個抽象類的時候,子類必須實現抽象類中的所有抽象方法;另外,這些方法的可見性 必須和抽象類中一樣(或者更為寬松)。如果抽象類中某個抽象方法被聲明為protected,那麼子類中實現的方法就應該聲明為protected或者public,而不 能定義為private。

getValue() . " ";
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ." ";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ." ";
?>

發佈留言