特集
2004/01/23 23:50:00 更新

全3回「WebプログラミングPHP言語入門」
特集:第2回 ショッピングカートの作成で分かる「PHP」の力 (4/5)


ショッピングカートを作ろう!

 今回の目的であるショッピングカート作りに取り掛かる前に、ショッピングカートとはどのようなWebアプリケーションなのかを整理しておこう。

 一般的なショッピングカートには、次の4つの機能を実装している。これらの機能のうち、1つでも実装されていなければ、ショッピングカートとして成り立たない。

  • カタログページから商品をピックアップしてカートに追加できる
  • カートの中身を確認できる
  • カートから不要な商品を取り消しできる
  • カートの内容で注文する

 本格的にショッピングカートの作成を行う場合、データベースを用いてカタログや注文内容を管理する必要があるが、今回はあくまでもプログラミング入門であるため、上記の4つの条件のみを満たしたショッピングカートの作成を行う。

カタログとカートのクラス化

 カタログとカートは、ショッピングカートの中で幾度となく利用される。スクリプトの随所に同じようなコードを記述すると、修正を重ねるうちに思わぬバグが発生する可能性が高い。そのようなバグを発生させないためにも、クラスによるカプセル化を行う事をお勧めする。

 前回の記事でも軽く触れたが、クラスとはオブジェクト指向プログラミングの核となる技術である。クラス化のメリットは、データ(プロパティ)と機能(メソッド)を1つのオブジェクトとして管理できる点にある。

 自動車に例えるなら、「ハンドル」「アクセル」「ブレーキ」「クラッチ」などがメソッドに相当する。ドライバー(利用者)が知っておかなければならないのは、運転方法(メソッド)であり、自動車の内部構造は一切知る必要は無いのだ。

 それでは、カタログとカートのそれぞれに必要な機能を列挙してみよう。

カタログ 商品情報を全て取得
  1つの商品に関する情報を取得
カート カートの中身を全て取得
  カートに商品を追加
  カートから商品を削除
  カートの中身を全て削除

 これらの機能を基に、カタログをクラス化したものが、下記のサンプルである。

Catalog.php: カタログクラス

<?php
class Catalog {
    // 商品リスト
    var $items;
    // カタログの初期化
    function Catalog() {
        $this->items = array (
            1 => array("id" => 1, "name" => "肉まん", "price" => 90),
            2 => array("id" => 2, "name" => "のど飴", "price" => 105),
            3 => array("id" => 3, "name" => "週刊誌", "price" => 270),
            4 => array("id" => 4, "name" => "鮭弁当", "price" => 450)
        );
    }
    // 全商品を取得する
    function getAll() {
        return $this->items;
    }
    // 任意の商品の詳細を取得する
    function getItem($id, $order=1) {
        $item = $this->items[$id];
        $item["order"] = $order;
        return $item;
    }
}
?> 

 あくまでもクラスは定義だけであり、実際に使うにはインスタンス(オブジェクト)を生成する必要がある。クラスについては、PHPドキュメントでも詳しく解説されているので、そちらを参照していただきたい。

 続いて、カートをクラス化したものが次のサンプル(Cart.php)である。

Cart.php:カートクラス

<?php
class Cart {
    // カートの初期化
    function Cart() {
        session_start();
        if (!array_key_exists("cart", $_SESSION)) {
            $_SESSION["cart"] = array();
        }
    }
    // カートの中身を取得する
    function getAll() {
        return $_SESSION["cart"];
    }
    // カートに商品を追加する
    function addItem($item) {
        $id = $item["id"];
        if (isset($_SESSION["cart"][$id])) {
            // 注文数を増やす
            $_SESSION["cart"][$id]["order"] += $item["order"];
        } else {
            // 新規注文
            $_SESSION["cart"][$id] = $item;
       }
    }
    // カートから商品を取り除く
    function removeItem($id) {
        unset($_SESSION["cart"][$id]);
    }
    // カートを空にする
    function removeAll() {
        $_SESSION["cart"] = array ();
    }
}
?> 

 Cart.php の各所では、$_SESSIONという連想配列が使われている。これはPHPでセッションを用いる際に使われる配列変数である。セッションとは、ページを遷移しても任意のデータを保持し続けるために用いる連想配列である。

 セッションの使い方は非常に簡単で、サンプル中の5行目にある関数 "session_start()" を実行することで、$_SESSIONという連想配列に保持しているデータを展開する。この連想配列の値は自由に変更可能で、スクリプト終了時には、PHPが管理しているセッションファイルへ自動的に保存される。

 カートの中身を管理する方法としてセッション機能を利用しているが、実は大半のショッピングサイトがセッション機能を利用してるのだ。スクリプトの規模に関係なく、目的を実現するために使う技術は全く変わらないのだ。

前のページ | 1 2 3 4 5 | 次のページ

[照井進吾,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.