0%

PHP(六)- 抽象类的继承与MySQL接口CURD操作的实现!

本篇博客移值自博主在PHP中文网上写的原文,这里做个记录

1.抽象类继承

1.1. 抽象类特点

  1. 抽象类不能实例化;
  2. 抽象类中定义的抽象方法必须在子类中实现;
  3. 如果子类定义了构造函数,父类的构造函数不会被调用,如果需要,构造函数中要写 parent::__construct()

1.2. 演示

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
<?php
/**
*
* @authors Alfred (jusheng_yao@outlook.com)
* @date 2019-10-13 19:01:49
* @version 1.0
*/

// 抽象类
abstract class People {
// 抽象属性
protected $name;

public function __construct($name = 'Alfred') {
$this->name = $name;
}

public function getName() {
return $this->name;
}

// 签名, 抽象方法
abstract public function setName($value);
}

class Person extends People {
//构造方法不会继承
public function __construct($name) {
parent::__construct($name);
}

//抽象类中定义的抽象方法必须在子类中实现
public function setName($value) {
$this->name = $value;
}
}

$person = new Person('轻狂书生');

echo '网游中的一个重要角色是: ' . $person->getName() . '<br>';

$person->setName("残雪飞戈");

echo 'Alfred 的QQ网名是: ' . $person->getName() . '<br>';

?>

2.数据库接口

  • 接口放置空方法;
  • DB类实现具体逻辑,如:
    • 增删改查、
    • 条件、
    • 限制、
    • 字段域、
    • 默认数据库参数属性等等

实例演示:

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
<?php
/**
*
* @authors Alfred (jusheng_yao@outlook.com)
* @date 2019-10-13 20:53:31
* @version 1.0
*/

// 接口,类的模板
interface MySQL {
// 增加数据
public function create($data);

// 读取数据
public function read();

// 更新数据
public function update($data, $where);

// 删除数据
public function delete($where);
}

// 类,接口的实现
/**
* mysql CURD操作
*/
class SQLAction implements MySQL {
// 数据库连接参数
protected $settings = [
'type' => 'mysql',
'host' => 'localhost',
'dbname' => 'tests',
'username' => 'root',
'password' => '123456',
];

// 数据库的连接对象
protected $pdo = null;

// 数据表
protected $table;

// 字段
public $field = '*';

// 条件
public $where;

// 数量
public $limit;

// 构造方法: 连接数据库,并设置默认的数据表名称
function __construct($dsn, $user, $password, $table = 'staff') {
$default_dsn = "{$this->settings['type']}:host={$this->settings['host']};dbname={$this->settings['dbname']}";
$dsn = empty($dsn) ? $default_dsn : $dsn;
$user = empty($user) ? $this->settings['username'] : $user;
$password = empty($password) ? $this->settings['password'] : $password;

$this->pdo = new PDO($dsn, $user, $password);
$this->table = $table;
}

// 增加数据
public function create($data) {
// 字段列表
$fields = ' (name, age, sex,position, mobile, hiredate) ';
// 值列表
$values = ' (:name, :age, :sex, :position, :mobile, :hiredate) ';

// 创建SQL - INSERT INTO TABLE FIELDS VALUES (...)
$sql = 'INSERT INTO ' . $this->table . $fields . ' VALUES ' . $values;
echo $sql . '<br>';

$stmt = $this->pdo->prepare($sql);
$stmt->execute($data);

return [
'count' => $stmt->rowCount(),
'id' => $this->pdo->lastInsertId(),
];
}

// 读取数据
public function read($fields = '*', $where = '', $limit = '0, 5') {
// 设置字段
$this->field = empty($fields) ? (empty($this->field) ? '*' : $this->field) : $fields;
//设置条件
$this->where = empty($where) ? (empty($this->where) ? '' : $this->where) : ' WHERE ' . $where;

// 设置显示数量
$this->limit = $limit === '0, 5' ? (empty($this->limit) ? ' LIMIT ' . $limit : $this->limit) : $limit;

// 创建SQL - SELECT FIELDS FROM TABLE WHERE (...) LIMIT ...
$sql = 'SELECT ' . $this->field . ' FROM ' . $this->table . $this->where . $this->limit;
echo $sql . '<br>';

$stmt = $this->pdo->prepare($sql);
$stmt->execute();

return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}

// 更新数据
public function update($data, $where) {
$keyArr = array_keys($data);
$set = '';
foreach ($keyArr as $value) {
$set .= $value . ' = :' . $value . ', ';
}

$set = rtrim($set, ', ');

// 设置条件
$this->where = empty($where) ? (empty($this->where) ? '' : $this->where) : ' WHERE ' . $where;

// 创建SQL - UPDATE TABLE SET ... WHERE (...)
$sql = 'UPDATE ' . $this->table . ' SET ' . $set . $this->where;
echo $sql . '<br>';

$stmt = $this->pdo->prepare($sql);
$stmt->execute($data);

return $stmt->rowCount();
}

// 删除数据
public function delete($where) {
// 设置条件
$this->where = empty($where) ? (empty($this->where) ? '' : $this->where) : ' WHERE ' . $where;
// 创建SQL - DELETE FROM TABLE WHERE (...)
$sql = 'DELETE FROM ' . $this->table . $this->where;
echo $sql . '<br>';

$stmt = $this->pdo->prepare($sql);
$stmt->execute();

return $stmt->rowCount();
}

// fields字段域
public function field($fields = '*') {
$this->field = empty($fields) ? '*' : $fields;
echo $this->field . '<br>';
return $this;
}

// where条件
public function where($where = '') {
$this->where = empty($where) ? $where : ' WHERE ' . $where;
echo $this->where . '<br>';
return $this;
}

// limit 数量限制
public function limit($limit) {
$this->limit = empty($limit) ? $limit : ' LIMIT ' . $limit;
echo $this->limit . '<br>';
return $this;
}

}

// 客户端的代码
$dsn = 'mysql:host=127.0.0.1;dbname=tests';
$user = 'root';
$password = '123456';
$db = new SQLAction($dsn, $user, $password);

// 遍历1
foreach ($db->read() as $item) {
print_r($item);
echo '<br>';
}
echo 'field: ' . $db->field . '<br>';
echo 'where: ' . $db->where . '<br>';
echo 'limit: ' . $db->limit . '<br>';
echo '<hr>';

// 遍历2
$db->field('staff_id,name,position,mobile')
->where('staff_id > 2')
->limit(8);

foreach ($db->read() as $item) {
print_r($item);
echo '<br>';
}
echo 'field: ' . $db->field . '<br>';
echo 'where: ' . $db->where . '<br>';
echo 'limit: ' . $db->limit . '<br>';
echo '<hr>';

// 新增
$data = [
'name' => '郭靖',
'age' => 29,
'sex' => 1,
'position' => '金刀驸马',
'mobile' => '1389998899',
'hiredate' => time(),
];

$res = $db->create($data);
echo '成功的新增了: ' . $res['count'] . ' 条记录,新增的记录的主键ID是: ' . $res['id'] . '<br>';
echo 'field: ' . $db->field . '<br>';
echo 'where: ' . $db->where . '<br>';
echo 'limit: ' . $db->limit . '<br>';
echo '<hr>';

// 更新
// $data = [
// 'age' => 40,
// 'position' => '抗金英雄'
// ];

// $where = 'staff_id = 11';
// echo '成功的更新了: ' . $db->update($data, $where) . ' 条记录' . '<br>';
// echo 'field: ' . $db->field . '<br>';
// echo 'where: ' . $db->where . '<br>';
// echo 'limit: ' . $db->limit . '<br>';
// echo '<hr>';

// 删除
// $where = 'staff_id = 11';
// echo '成功的删除了: ' . $db->delete($where) . ' 条记录' . '<br>';
// echo 'field: ' . $db->field . '<br>';
// echo 'where: ' . $db->where . '<br>';
// echo 'limit: ' . $db->limit . '<br>';
// echo '<hr>';
------------- 本文已结束 感谢您的阅读! -------------
Donate comment here.

本文标题:PHP(六)- 抽象类的继承与MySQL接口CURD操作的实现!

文章作者:Jusheng Yao

发布时间:2020年03月13日 - 21:25

最后更新:2020年03月13日 - 22:33

原始链接:http://yaojusheng.github.io/archives/f1afa15c.html

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道