近期跟著別人開發一套php程式,深感自己物件導向很白癡,於是再次鞏固了一下物件導向的學習,自己整理了一下這幾天物件導向的東西,給大家分享!!
物件導向的三大特性:
封裝 -- 隱藏內部實現,穩定外部介面
繼承 -- 子類繼承父類成員,實現代碼複用
多態 -- 不同子類對同一訊息做出不同的反映
一、介面 -- 是一套規範,遵守這個規範就可以實現功能
在PHP中,介面同樣是一種規範和標準,可以約束類的行為,定義一個介面不指定具體的實現。
介面是把隱式公用方法和屬性群組合起來,以封裝特定功能的一個集合。一旦定義了介面,就可以在類中實現它。這樣,類就可以支援介面所指定的所有屬性和成員。
注意:
介面不能單獨存在。介面不能像執行個體化一個類那樣執行個體化介面。介面不能包含實現其成員的任何代碼,而只能定義成員本身。實現介面必須在引用介面的類中實現。
一個類可以支援多個介面,多個類也可以支援相同的介面。所以介面的概念讓使用者和其他開發人員更容易理解其他人的代碼。
二、多態性
1、指不同的對象收到相同訊息時,會產生不同行為
2、同一個類在不同的場合下表現出不同的行為特徵
三、抽象類別和抽象方法
1、抽象類別用來列舉一個類所需要的行為
2、抽象類別不明確提供具體實現方法
3、抽象類別必須由其子類實現它的抽象方法(除非子類也具有抽象性)
4、抽象類別不能被執行個體化
5、抽象類別不能被鎖(final修飾)
四、抽象類別的使用場合
1、抽象類別和抽象方法實現多態性
2、父類提供一系列規定,約束子類的行為
3、父類可以提供一些共性的行為
以上就是我對物件導向的總結,下面就是詳細的說說php物件導向的重點,痛點!
類: [url=http://www.t00ls.net/#viewSource]連結標記預覽原始碼[/url] [url=http://www.t00ls.net/#printSource]連結標記列印[/url][url=http://www.t00ls.net/#about]連結標記關於[/url]01
02/*
03 類的基本知識
04 1、類使用class關鍵字定義,類的名稱每個單字首大寫
05 2、類的屬性必須用封裝關鍵字修飾(public、protected、private)
06 3、類的方法可以不被封裝關鍵字修飾,預設為:public
07 4、類中的建構函式:__construct(){},預設為空白,可初始化屬性。
08 也可以重載建構函式,有任意多個參數。注意:PHP中建構函式
09 只能有一個。
10 5、類中的解構函式:__destruct(){}
11*/
12/*
13 類的封裝關鍵字
14 1、public -- 公開的
15 2、protected -- 受保護的
16 3、private -- 私人的
17
18 就是因為使用了受保護的或私人的封裝關鍵字,所以產生了讀寫方法,
19 於是寫方法可以驗證資料的合法性;讀方法可以將受保護或私人的屬
20 性保護起來不被外部修改。
21
22 4、__get($n){return $this->$n;} 讀方法
23 5、__set($n,$v){$this->$n=$v;} 寫方法
24
25*/
26class People{
27 private $name;
28 private $age;
29 private $sex;
30
31 //建構函式
32 function __construct($name,$age=18,$sex="男"){
33 $this -> name = $name;
34 $this -> age = $age;
35 $this -> sex = $sex;
36 echo $this -> show();
37 }
38
39 //解構函式
40 function __destruct(){
41 //echo "{$this->name}被釋放了!";
42 }
43
44 //讀屬性
45 function __get($n){
46 if($n == "name"){
47 return $this -> $n;
48 }
49 }
50
51 //寫屬性
52 function __set($n,$v){
53 if($n == "name"){
54 $this -> $n = $v;
55 }
56 }
57
58 public function show(){
59 return "恭喜你!建立{$this->name}對象成功!";
60 }
61}
62
63/*
64 繼承
65 1、使用關鍵字extends
66 2、被繼承的類叫做:父類(基類)
67 3、繼承的類叫做:子類(衍生類別)
68 4、單一繼承
69 5、具有傳遞性,即:父類有的,子類也會有
70 6、子類的封裝關鍵字層級不能低於父類
71 7、父類建構函式也會被繼承
72 8、重載
73*/
74class Stu extends People{
75
76
77 public function show(){
78 return parent::show()."O(∩_∩)O哈哈~";
79 }
80}
81$stu = new Stu("張三");
82echo $stu -> name;
83?>
抽象類別: [url=http://www.t00ls.net/#viewSource]連結標記預覽原始碼[/url] [url=http://www.t00ls.net/#printSource]連結標記列印[/url][url=http://www.t00ls.net/#about]連結標記關於[/url]01
02/*
03 抽象類別
04 1、使用abstract關鍵字修飾的類叫抽象類別,類中至少有一個抽象方法,
05 可以有具體方法。
06 2、抽象類別不能被執行個體化,不能被鎖(final修飾),只能被繼承
07 3、抽象類別必須由其子類實現它的抽象方法(除非子類也具有抽象性)
08*/
09abstract class Animal{
10 protected $name;
11 protected $age;
12 protected $weight;
13
14 abstract function __construct();
15
16 abstract function eat($name);
17
18 abstract function sleep();
19
20 static function show($what){
21 return "我是{$what->name}!";
22 }
23}
24
25//Dog類
26class Dog extends Animal{
27 function __construct($name,$age,$weight){
28 $this -> name = $name;
29 $this -> age = $age;
30 $this -> weight = $weight;
31 }
32
33 function eat($n){
34 return $this->name."在吃".$n;
35 }
36
37 function sleep(){
38 return $this->name."睡的正酣!";
39 }
40
41 function wangwang(){
42 return "汪汪叫!!!";
43 }
44}
45
46//Cat類
47class Cat extends Animal{
48 function __construct($name,$age,$weight){
49 $this -> name = $name;
50 $this -> age = $age;
51 $this -> weight = $weight;
52 echo $this->miaomiao();
53 }
54
55 function eat($n){
56 return $this->name."在吃".$n;
57 }
58
59 function sleep(){
60 return $this->name."睡的正酣!";
61 }
62
63 function miaomiao(){
64 return "喵喵叫!!!";
65 }
66}
67
68$dog = new Dog("旺財",4,"10kg");
69echo $dog->sleep();
70echo "";
71$cat = new Cat("龍貓",2,"5kg");
72echo "";
73echo $cat->sleep();
74echo "";
75echo Animal::show($dog);
76echo "";
77echo Animal::show($cat);
78?>
介面: [url=http://www.t00ls.net/#viewSource]連結標記預覽原始碼[/url] [url=http://www.t00ls.net/#printSource]連結標記列印[/url][url=http://www.t00ls.net/#about]連結標記關於[/url]01
02interface IUsb{
03 const name1="3.0介面";
04 function type1($what);
05 function power1();
06}
07
08interface IApi{
09 const name2="擴充插槽";
10 function type2();
11 function power2();
12}
13
14class Pc implements IUsb,IApi{
15
16 function type1($what){
17 if($what == IUsb::name1){
18 return IUsb::name1.$this->power1();
19 }
20 else{
21 return "介面不對,無法使用!";
22 }
23 }
24
25 function power1(){
26 return "介面正確,電源開啟中...";
27 }
28
29 function type2(){}
30
31 function power2(){}
32}
33
34class Mp3 implements IUsb{
35 public $name = IUsb::name1;
36 function type1($s){}
37 function power1(){}
38}
39$p = new Pc();
40$mp3 = new Mp3();
41echo $p -> type1($mp3->name);
42?>
希望對大家的php學習有所協助,呵呵,反正這幾天我重溫物件導向收穫很多,也提醒廣大同學,溫故而知新!!!!