php物件導向學習

來源:互聯網
上載者:User
近期跟著別人開發一套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學習有所協助,呵呵,反正這幾天我重溫物件導向收穫很多,也提醒廣大同學,溫故而知新!!!!

  • 聯繫我們

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