PHP对象、模式与实践之高级特性分析

2025-05-27 0 45

本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:

高级特性

包括:

1.静态方法和属性(通过类而不是对象来访问数据和功能)
2.抽象类和接口(设计,实现分离)
3.错误处理(异常)
4.Final类和方法(限制继承)
5.拦截器(自动委托)
6.析构方法(对象销毁前的清理工作)
7.克隆对象(创建对象的副本)
8.把对象解析成字符串

PS,学会从内存的角度看代码。想象计算机的微观世界。

静态方法的小例子

?

1

2

3

4

5

6

7

8

9
<?php

class StaticExample{

static public $aNum = 10;

static public function sayHello(){

print "hello";

}

}

print StaticExample::$aNum."<br/>";

StaticExample::sayHello();

tips:

1.静态方法不能访问类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。
2.我们不能再对象中调用静态方法,因此不能再静态方法中使用伪变量$this。

静态方法的大例子

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111
<?php

class ShopProduct{

private $title;

private $producerMainName;

private $producerFirstName;

protected $price;

private $discount = 0;

private $id = 0;

function __construct($title,$firstName,$mainName,$price){

$this->title = $title;

$this->producerFirstName = $firstName;

$this->producerMainName = $mainName;

$this->price = $price;

}

public function setID($id){

$this->id = $id;

}

public static function getInstance($id,PDO $pdo){

$query = "select * from products where id= '$id'";

$stmt = $pdo->query($query);

$row = $stmt->fetch();

if(empty($row)){

return null;

}

if($row['type'] == "book"){

$product = new BookProduct($row['title'],

$row['firstname'],

$row['mainname'],

$row['price'],

$row['numpages']

);

}else if($row['type'] == "cd"){

$product = new CdProduct($row['title'],

$row['firstname'],

$row['mainname'],

$row['price'],

$row['playLength']

);

}else{

$product = new ShopProduct($row['title'],

$row['firstname'],

$row['mainname'],

$row['price']

);

}

$product->setId($row['id']);

$product->setDiscount($row['discount']);

return $product;

}

public function getProducerFirstName(){

return $this->producerFirstName;

}

public function getProducerMainName(){

return $this->producerMainName;

}

public function setDiscount($num){

$this->discount = $num;

}

public function getDiscount(){

return $this->discount;

}

public function getTitle(){

return $this->title;

}

public function getPrice(){

return ($this->price - $this->discount);

}

function getProducer(){

return $this->producerFirstName." ".$this->producerMainName;

}

function getSummaryLine(){

$base = "$this->title({$this->producerMainName},";

$base .= "{$this->producerFirstName})";

return $base;

}

}

class CdProduct extends ShopProduct{

private $playLength;

function __construct($title,$firstName,$mainName,$price,$playLength){

parent::__construct($title,$firstName,$mainName,$price);//继承父类的构造函数

$this->playLength = $playLength;

}

function getPlayLength(){

return $this->playLength;

}

function getSummaryLine(){

$base = parent::getSummaryLine();

$base .= ":playing time {$this->playLength}";

return $base;

}

}

class BookProduct extends ShopProduct{

private $numPages = 0;

function __construct($title,$firstName,$mainName,$price,$numPages){

parent::__construct($title,$firstName,$mainName,$price);

$this->numPages = $numPages;

}

function getnumPages(){

return $this->numPages;

}

function getSummaryLine(){

$base = parent::getSummaryLine();

$base .= ":page count {$this->numPages}";

return $base;

}

}

$dsn = "sqlite:C:/Users/Administrator/Desktop/shop.db";

$pdo = new PDO($dsn,null,null);

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$obj = ShopProduct::getInstance(1,$pdo);

echo $obj->getSummaryLine();

希望本文所述对大家PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP对象、模式与实践之高级特性分析 https://www.kuaiidc.com/74151.html

相关文章

发表评论
暂无评论