PHPプログラミング診断室

第3回 郷に入っては郷に従え(診断編)

この記事を読むのに必要な時間:およそ 6 分

新年あけましておめでとうございます。昨年暮れに始まった本連載ですが,みなさんの現場にあるPHPコードを改善すべく,診断を行ってきたいと思います。本年もよろしくお願いします!

PHPにはPHPの書き方がある

2014年最初の患者さんは,とあるECサイトにて動いていたコードです。ショッピングカートを表現するクラスで,書かれた時期は2000年ごろです。動作していたPHPのバージョンは,PHP 3の国際化版というオールドマニアには垂涎もののバージョンです。当時は,PHPが普及しだしたころで,まだ標準的なPHPコードの書き方というものがない状況でした。そのため,ほかの言語で培った流儀をそのまま持ってきて書かれたコードがよく見られました。

今回は,そんなほかの言語の書き方を持ってきてしまったコードです。さあ,お入りください。

<?php
/*=============================================================================
    title   :   Cartクラス

    commnets:   買い物カゴを定義する
                コンストラクタで、一意のカートID&カートDBに新レコードを
                生成。
                カートIDはクッキーに発行し、セッション管理を行う
    how to  :

    filename:   cart.inc

    date    :   2000/06/22
  ===========================================================================*/

/*---------------------------------------------------------------------------*/
/*  定数定義
/*---------------------------------------------------------------------------*/
define("CART_ISSUE_TIME", 24);    //カート有効時間

class Cart{
    //メンバ変数
    var $a_Item = "";       //アイテム情報
    var $cCartId;           //カートID
    var $iMoney = 0;        //合計金額

    /*-----------------------------------------------------------------------*/
    /*  コンストラクタ
    /*-----------------------------------------------------------------------*/
    function Cart(){
        global $CK_cCartId;

        //カートIDセット
        if(!$CK_cCartId)    $CK_cCartId = make_unique_code("cart", "id", 8);
        $this->cCartId = $CK_cCartId;
    }

    /*-----------------------------------------------------------------------*/
    /*  商品を追加する
    /*-----------------------------------------------------------------------*/
    function do_add_item($cGoodsCode){
        $a_Value[0] = $this->cCartId;
        $a_Value[] = date("YmdHis", mktime(date("H") + CART_ISSUE_TIME, date("i"), date("s"), date("m"), date("d"), date("Y")));    //有効時間時間;
        $a_Value[] = $cGoodsCode;
        $a_Value[] = 1;

        $db = new DB;
        $db->do_insert("cart", "", $a_Value);
    }

    /*-----------------------------------------------------------------------*/
    /*  商品個数を修正する
    /*-----------------------------------------------------------------------*/
    function do_change_item($cGoodsCode, $iGoodsNum){
        $a_Value[0] = $iGoodsNum;

        //一時削除
        $this->do_delete_item($cGoodsCode);

        $a_Value[0] = $this->cCartId;
        $a_Value[] = make_date("YmdHis");
        $a_Value[] = $cGoodsCode;
        $a_Value[] = $iGoodsNum;

        $db = new DB;
        $db->do_insert("cart", "", $a_Value);
    }

    /*-----------------------------------------------------------------------*/
    /*  商品を削除する
    /*-----------------------------------------------------------------------*/
    function do_delete_item($cGoodsCode){
        if($cGoodsCode == -1) $cWhere = " WHERE id=\"" . $this->cCartId . "\"";
        else                  $cWhere = " WHERE id=\"" . $this->cCartId . "\" AND gds_id=\"" . $cGoodsCode . "\"";

        $db = new DB;
        $db->do_delete("cart", $cWhere);
    }

    /*-----------------------------------------------------------------------*/
    /*  カートIDをクッキーに保存
    /*-----------------------------------------------------------------------*/
    function set_cookie(){
        setcookie("CK_cCartId", $this->cCartId, time()+3600);
    }

    /*-----------------------------------------------------------------------*/
    /*  カートを削除
    /*-----------------------------------------------------------------------*/
    function delete_cart(){
        //クッキーを削除
        setcookie("CK_cCartId", $this->cCartId, time()-1);
        //DBを削除
        $db = new DB;
        $db->do_delete("cart", " WHERE id=\"" . $this->cCartId . "\"");
    }

    /*-----------------------------------------------------------------------*/
    /*  メンバ変数参照
    /*-----------------------------------------------------------------------*/
    /*----------    カートID                                        ---------*/
    function get_id(){
        return $this->cCartId;
    }

    /*----------    商品情報                                        ---------*/
    function get_item(){
        return $this->a_Item;
    }

    /*----------    合計個数                                        ---------*/
    function get_count(){
        $count = 0;
        while($this->a_Item[$i]){
            $count += $this->a_Item[$i];
        }
        return $count;
    }
}
?>

著者プロフィール

新原雅司(しんばらまさし)

1×1株式会社 代表取締役

大阪でPHPを駆使してWebシステムの開発を行う日々。MotoGPをこよなく愛す。愛車はPCX。

Twitter:shin1x1
blog:Shin x blog

コメント

コメントの記入