-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathPrototype.class.php
executable file
·50 lines (42 loc) · 1.3 KB
/
Prototype.class.php
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
<?php
/**
* 原型:原型设计模式创建对象的方式是复制和克隆初始对象或原型,这种方式比创建新实例更为有效。
*
*/
//初始CD类
class CD {
public $title = "";
public $band = "";
public $trackList = array();
public function __construct($id) {
$handle = mysqli_connect("localhost", "root", "root");
mysqli_select_db("test", $handle);
$query = "select * from cd where id = {$id}";
$results= mysqli_query($query, $handle);
if ($row = mysqli_fetch_assoc($results)) {
$this->band = $row["band"];
$this->title = $row["title"];
}
}
public function buy() {
var_dump($this);
}
}
//采用原型设计模式的混合CD类, 利用PHP的克隆能力。
class MixtapeCD extends CD {
public function __clone() {
$this->title = "Mixtape";
}
}
//示例测试
$externalPurchaseInfoBandID = 1;
$bandMixproto = new MixtapeCD($externalPurchaseInfoBandID);
$externalPurchaseInfo = array();
$externalPurchaseInfo[] = array("brrr", "goodbye");
$externalPurchaseInfo[] = array("what it means", "brrr");
//因为使用克隆技术, 所以每个新的循环都不需要针对数据库的新查询。
foreach ($externalPurchaseInfo as $mixed) {
$cd = clone $bandMixproto;
$cd->trackList = $mixed;
$cd->buy();
}