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