ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで実装されたショッピング カート クラスの例

PHP_PHP チュートリアルで実装されたショッピング カート クラスの例

WBOY
WBOYオリジナル
2016-07-13 09:50:41821ブラウズ

PHPで実装したショッピングカートクラスの例

この記事では、PHPで実装したショッピングカートクラスについて説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

このショッピング カート クラスは、CodeIgniter のショッピング カート クラスの模倣に基づいて実装されています。

ショッピングカートの基本的な機能は次のとおりです:

1) ショッピングカートに商品を追加します
2) ショッピングカートから商品を削除します
3) ショッピングカートの商品情報を更新 [+1/-1]
4) ショッピングカートのアイテムの統計
1.トータルプロジェクト
2. 合計数量
3.合計金額
5) 買い物アイテムの数量と金額を計算します
6) ショッピングカートをクリアします

1.cart.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

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

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

/**

*

* @著者Quanshuidingdang

*/

クラスカート{

//物品idおよび名称规则,调试情報制御

プライベート $product_id_rule = '.a-z0-9-_'; //小写字母 | 数字 | ._-

private $product_name_rule = '.:a-z0-9-_';//小写字母 | 数字 | ._-:

プライベート $debug = TRUE;

//购物车

プライベート $_cart_contents = array();

/**

* コンストラクター

*

* @param 配列

*/

パブリック関数 __construct() {

//初めて使用しましたか?

if(isset($_SESSION['cart_contents'])) {

$this->_cart_contents = $_SESSION['cart_contents'];

} 他 {

$this->_cart_contents['cart_total'] = 0;

$this->_cart_contents['total_items'] = 0;

}

if($this->debug === TRUE) {

//$this->_log("cart_create_success");

}

}

/**

* カートに商品を追加します

*

* @アクセス公開

* @param array 1 次元または多次元の配列。キー値の名前が含まれている必要があります:

id -> アイテム ID の識別、

数量 -> 数量、

価格 -> 単価(価格)、

名前 -> アイテム名

* @return bool

*/

パブリック関数 insert($items = array()) {

//输入物品パラメータ异常

if( ! is_array($items) OR count($items) == 0) {

if($this->debug === TRUE) {

$this->_log("cart_no_items_insert");

}

FALSEを返す;

}

//物品パラメータ处理

$save_cart = FALSE;

if(isset($items['id'])) {

if($this->_insert($items) === TRUE) {

$save_cart = TRUE;

}

} 他 {

foreach($items as $val) {

if(is_array($val) AND isset($val['id'])) {

if($this->_insert($val) == TRUE) {

$save_cart = TRUE;

}

}

}

}

//当插入成功後セッションにデータを保存します

if($save_cart) {

$this->_save_cart();

TRUEを返す;

}

FALSEを返す;

}

/**

*ショッピングカートの商品情報を更新

*

* @アクセス公開

* @param 配列

* @return bool

*/

パブリック関数 update($items = array()) {

//输入物品パラメータ异常

if( !is_array($items) OR count($items) == 0) {

if($this->debug === TRUE) {

$this->_log("cart_no_items_insert");

}

FALSEを返す;

}

//物品パラメータ处理

$save_cart = FALSE;

if(isset($items['rowid']) AND isset($items['qty'])) {

if($this->_update($items) === TRUE) {

$save_cart = TRUE;

}

} 他 {

foreach($items as $val) {

if(is_array($val) AND isset($val['rowid']) AND isset($val['qty'])) {

if($this->_update($val) === TRUE) {

$save_cart = TRUE;

}

}

}

}

//当更新成功後データをセッションに保存します

if($save_cart) {

$this->_save_cart();

TRUEを返す;

}

FALSEを返す;

}

/**

* ショッピングカートのアイテムの合計金額を取得します

*

* @return int

*/

パブリック関数 total() {

return $this->_cart_contents['cart_total'];

}

/**

* ショッピングカートのアイテムタイプを取得します

*

* @return int

*/

パブリック関数 total_items() {

return $this->_cart_contents['total_items'];

}

/**

* ショッピングカートを入手

*

* @配列を返す

*/

パブリック関数contents() {

$this->_cart_contents を返す;

}

/**

* ショッピングカートのアイテムオプションを取得します

*

* @パラメータ文字列

* @配列を返す

*/

パブリック関数オプション($rowid = '') {

if($this->has_options($rowid)) {

return $this->_cart_contents[$rowid]['options'];

} 他 {

配列を返す();

}

}

/**

* ショッピングカートをクリア

*

*/

パブリック関数 destroy() {

unset($this->_cart_contents);

$this->_cart_contents['cart_total'] = 0;

$this->_cart_contents['total_items'] = 0;

unset($_SESSION['cart_contents']);

}

/**

* ショッピングカートのアイテムにオプションがあるかどうかを決定します

*

* @パラメータ文字列

* @return bool

*/

プライベート関数 has_options($rowid = '') {

if( ! isset($this->_cart_contents[$rowid]['options']) OR count($this->_cart_contents[$rowid]['options']) === 0) {

FALSEを返す;

}

TRUEを返す;

}

/**

* 插入据

*

* @アクセス非公開

* @param 配列

* @return bool

*/

プライベート関数 _insert($items = array()) {

//入力項目パラメータが異常です

if( ! is_array($items) OR count($items) == 0) {

if($this->debug === TRUE) {

$this->_log("cart_no_data_insert");

}

FALSEを返す;

}

//商品パラメータが無効な場合(ID/数量/価格/名前がない場合)

if( ! isset($items['id']) OR ! isset($items['qty']) OR ! isset($items['price']) OR ! isset($items['name']) ){

if($this->debug === TRUE) {

$this->_log("cart_items_data_invalid");

}

FALSEを返す;

}

//商品数量から左のゼロと数字以外の文字を削除します

$items['qty'] = トリム(preg_replace('/([^0-9])/i', '', $items['qty']));

$items['qty'] = trim(preg_replace('/^([0]+)/i', '', $items['qty']));

//商品数量が0または番号以外の場合、ショッピングカートでは何も行いません!

if( ! is_numeric($items['qty']) OR $items['qty'] == 0) {

if($this->debug === TRUE) {

$this->_log("cart_items_data(qty)_invalid");

}

FALSEを返す;

}

//アイテムID定期判定

if( ! preg_match('/^['.$this->product_id_rule.']+$/i', $items['id'])) {

if($this->debug === TRUE) {

$this->_log("cart_items_data(id)_invalid");

}

FALSEを返す;

}

//項目名規則性判定

if( ! preg_match('/^['.$this->product_name_rule.']+$/i', $items['name'])) {

if($this->debug === TRUE) {

$this->_log("cart_items_data(name)_invalid");

}

FALSEを返す;

}

//アイテム単価から左のゼロと数字以外の文字(小数点付き)を削除します

$items['価格'] = トリム(preg_replace('/([^0-9.])/i', '', $items['価格']));

$items['価格'] = トリム(preg_replace('/^([0]+)/i', '', $items['価格']));

//商品の単価が数字でない場合

if( ! is_numeric($items['price'])) {

if($this->debug === TRUE) {

$this->_log("cart_items_data(price)_invalid");

}

FALSEを返す;

}

//アイテムの一意の ID を生成します

if(isset($items['options']) AND count($items['options']) >0) {

$rowid = md5($items['id'].implode('', $items['options']));

} 他 {

$rowid = md5($items['id']);

}

//商品をショッピングカートに追加します

unset($this->_cart_contents[$rowid]);

$this->_cart_contents[$rowid]['rowid'] = $rowid;

foreach($items as $key => $val) {

$this->_cart_contents[$rowid][$key] = $val;

}

TRUEを返す;

}

/**

* ショッピングカートの商品情報(非公開)を更新

*

* @アクセス非公開

* @param 配列

* @return bool

*/

プライベート関数 _update($items = array()) {

//入力項目パラメータが異常です

if( ! isset($items['rowid']) OR ! isset($items['qty']) OR ! isset($this->_cart_contents[$items['rowid']])) {

if($this->debug == TRUE) {

$this->_log("cart_items_data_invalid");

}

FALSEを返す;

}

//商品数量から左のゼロと数字以外の文字を削除します

$items['qty'] = preg_replace('/([^0-9])/i', '', $items['qty']);

$items['qty'] = preg_replace('/^([0]+)/i', '', $items['qty']);

//商品数量が数値以外の場合、ショッピングカートへの処理は行われません!

if( ! is_numeric($items['qty'])) {

if($this->debug === TRUE) {

$this->_log("cart_items_data(qty)_invalid");

}

FALSEを返す;

}

//ショッピングカート内の商品数が更新が必要な商品数と一致する場合は、更新する必要はありません

if($this->_cart_contents[$items['rowid']]['qty'] == $items['qty']) {

if($this->debug === TRUE) {

$this->_log("cart_items_data(qty)_equal");

}

FALSEを返す;

}

//更新する必要があるアイテムの数が 0 の場合、このアイテムは不要であり、ショッピング カートから削除する必要があることを意味します

//それ以外の場合、ショッピング カート内の商品数は、入力された商品数と等しくなるように変更されます

if($items['qty'] == 0) {

unset($this->_cart_contents[$items['rowid']]);

} 他 {

$this->_cart_contents[$items['rowid']]['qty'] = $items['qty'];

}

TRUEを返す;

}

/**

* ショッピングカートのデータをセッションに保存します

*

* @アクセス非公開

* @return bool

*/

プライベート関数 _save_cart() {

//まず、ショッピングカート内のアイテムの種類と合計金額をクリアしてください

unset($this->_cart_contents['total_items']);

unset($this->_cart_contents['cart_total']);

//次に、配列を走査してアイテムの種類と合計金額をカウントします

$合計 = 0;

foreach($this->cart_contents as $key =>$val) {

if( ! is_array($val) OR ! isset($val['price']) OR ! isset($val['qty'])) {

続き;

}

$合計 += ($val['価格'] * $val['数量']);

//各アイテムの合計金額

$this->_cart_contents[$key]['小計'] = ($val['価格'] * $val['数量']);

}

//ショッピングカート内のアイテムの種類と合計金額を設定します

$this->_cart_contents['total_items'] = count($this->_cart_contents);

$this->_cart_contents['cart_total'] = $total;

//ショッピングカート内の要素の数が 2 以下の場合、ショッピングカートは空であることを意味します

if(count($this->_cart_contents)

unset($_SESSION['cart_contents']);

FALSEを返す;

}

//ショッピングカートのデータをセッションに保存します

$_SESSION['cart_contents'] = $this->_cart_contents;

TRUEを返す;

}

/**

* ロギング

*

* @アクセス非公開

* @パラメータ文字列

* @return bool

*/

プライベート関数 _log($msg) {

return @file_put_contents('cart_err.log', $msg, FILE_APPEND);

}

}

/*cart.php の終わり*/

/*場所 /htdocs/cart.php*/

2. cart_demo.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

session_start();

require_once('cart.php');

$items = 配列(

0 => 配列(

'id' => 'sp001',

'数量' => 20,

'価格' => '10.50',

'名前' => 'a002',

'オプション' => 配列(

「製」=>「中国」、

'会社' => 'bgi'

)

)、

1 => 配列(

'id' => 'sp002',

'数量' => 1,

'価格' => '3.50',

'名前' => 'b002'

)

);

$arr = 配列(

'rowid' => '86dbb7cb58a667558b4bbb1f60330028',

'数量' => 21

);

$cart = 新しいカート();

$カート->挿入($アイテム);

//var_dump($cart->contents());

$カート->更新($arr);

var_dump($cart->contents());

//$cart->destroy();

//var_dump($_SESSION['cart_contents']);

/*phpの終わり*/

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

http://www.bkjia.com/PHPjc/1017839.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/1017839.html技術記事 PHP で実装されたショッピング カート クラスの例 この記事では、PHP で実装されたショッピング カート クラスについて説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです: このショッピング カート クラスは、CodeIgniter に基づいたショッピング カート クラスです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。