本文实例讲述了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程序设计有所帮助。