php面向對象基礎二
1. 接口
在php編程語言中接口是一個抽象類型,是抽象方法的集合。接口通常以interface來聲明。一個類通過實現接口的方式,從而來實現接口的方法(抽象方法)。
接口定義:
interface InterAnimal{
public function speak();
public function name($name);
}
//接口實現
class cat implements InterAnimal{
public function speak(){
echo "speak";
}
public function name($name){
echo "My name is ".$name;
}
}
特別注意:
- 類全部爲抽象方法(不需要聲明abstract)
- 接口抽象方法是public
- 成員(字段)必須是常量
2. 繼承
繼承自另一個類的類被稱爲該類的子類。這種關係通常用父類和孩子來比喻。子類將繼
承父類的特性。這些特性由屬性和方法組成。子類可以增加父類之外的新功能,因此子類也
被稱爲父類的“擴展”。
在PHP中,類繼承通過extends關鍵字實現。繼承自其他類的類成爲子類或派生類,子
類所繼承的類成爲父類或基類。
class Computer {
private $_name = '聯想';
public function __get($_key) {
return $this->$_key;
}
public function run() {
echo '父類run方法';
}
}
class NoteBookComputer extends Computer {
}
$notebookcomputer = new NoteBookComputer ();
$notebookcomputer->run (); //繼承父類中的run()方法
echo $notebookcomputer->_name; //通過魔法函數__get()獲得私有字段
特別注意:
有時候並不需要父類的字段和方法,那麼可以通過子類的重寫來修改父類的字段和方法。
class Computer {
public $_name = '聯想';
protected function run() {
echo '我是父類';
}
}
//重寫其字段、方法
class NoteBookComputer extends Computer {
public $_name = 'IBM';
public function run() {
echo '我是子類';
}
}
通過重寫調用父類的方法
有的時候,我們需要通過重寫的方法裏能夠調用父類的方法內容,這個時候就必須使用
語法:父類名::方法()、parent::方法()即可調用。
final關鍵字可以防止類被繼承,有些時候只想做個獨立的類,不想被其他類繼承使用。
3. 多態
多態是指OOP 能夠根據使用類的上下文來重新定義或改變類的性質或行爲,或者說接口的多種不同的實現方式即爲多態。
interface Computer {
public function version();
public function work();
}
class NotebookComputer implements Computer {
public function version() {
echo '聯想<br>';
}
public function work() {
echo '筆記本正在隨時攜帶運行!';
}
}
class desktopComputer implements Computer {
public function version() {
echo 'IBM';
}
public function work() {
echo '臺式電腦正在工作站運行!';
}
}
class Person {
public function run($type) {
$type->version ();
$type->work ();
}
}
$person = new Person ();
$desktopcomputer = new desktopComputer ();
$notebookcomputer = new NoteBookComputer ();
$person->run ( $notebookcomputer );
4. 抽象類和方法
抽象類特性:
- 抽象類不能產生實例對象,只能被繼承;
- 抽象方法一定在抽象類中,抽象類中不一定有抽象方法;
- 繼承一個抽象類時,子類必須重寫父類中所有抽象方法;
- 被定義爲抽象的方法只是聲明其調用方式(參數),並不實現。
abstract class Computer {
abstract function run();
}
final class NotebookComputer extends Computer {
public function run() {
echo '抽象類的實現';
}
}