オブジェクト

オブジェクト – MDB_QueryTool でオブジェクトを使用する方法

MDB_QueryTool のオブジェクトについて

結果としてオブジェクトを使用することができます。 概要を示す例は 導入 にあります。

しかし、オブジェクトを使用するというのは、 単に結果を配列のかわりにオブジェクトを返すというだけのことではありません。 デフォルトの MDB_QueryTool_Result_Row ではなく、 独自のクラスで結果を返すように登録することができるのです。 登録するクラスは MDB_QueryTool_Result_Row クラスを継承したものである必要があります。

例 1 - デフォルトの結果クラスの変更

結果のクラスを変更するには setReturnClass メソッドを使用します。

<?php
require_once 'MDB/QueryTool.php';
require_once 
'MDB/QueryTool/Result/Object.php';
define('TABLE_CARS''cars');
$dsn 'mysql://user:pass@host/dbname';

/**
 * "car" テーブルに、以下のフィールドがあるものとします
 * (id, model, hp, color, clima, price)
 */
class Car extends MDB_QueryTool
{
    public 
$table TABLE_CARS;
}

class 
CarEntity extends MDB_QueryTool_Result_Row
{
}

// Car クラスのインスタンスを作成します
$car = new Car($dsn);
$car->useResult('object');
$car->setReturnClass('CarEntity');
?>

クラス変数へのアクセス制御

これにより、ゲッター/セッター を実装できるようになり、 値へのアクセスを制御できるようになりました。 外部からのクラス変数へのアクセスを拒否するには、 protected として宣言します。private として宣言すると、 外部からだけではなく親クラスからのアクセスも拒否します。 もちろん、そのようにするなら、 対応するメソッドを実装して変数にアクセスできるようにしておかなければなりません。

例 2 - クラス変数へのアクセスの制限

サンプルを短くまとめるため、model と hp そして clima に関するメソッドのみを実装しました。

<?php
require_once 'MDB/QueryTool.php';
require_once 
'MDB/QueryTool/Result/Object.php';
define('TABLE_CARS''cars');
$dsn 'mysql://user:pass@host/dbname';

/**
 * "car" テーブルに、以下のフィールドがあるものとします
 * (id, model, hp, color, clima, price)
 */
class Car extends MDB_QueryTool
{
    public 
$table TABLE_CARS;
}

class 
CarEntity extends MDB_QueryTool_Result_Row
{
    protected 
$id;
    protected 
$model;
    protected 
$hp;
    protected 
$color;
    protected 
$clima;
    protected 
$price;
    public function 
getModel() {
        return 
$this->model;
    }
    public function 
setModel($model) {
        
$this->model $model;
    }
    public function 
getHp() {
        return 
$this->hp;
    }
    public function 
setHp($hp) {
        
$this->hp $hp;
    }
        public function 
getClima() {
        if (
$this->clima) {
            return 
true;
        } else {
            return 
false;
        }
    }
    public function 
setClima($clima) {
        if (
$clima) {
            
$this->clima 1;
        } else {
            
$this->clima 0;
        }
    }
}

// Car クラスのインスタンスを作成します
$car = new Car($dsn);
$car->useResult('object');
$car->setReturnClass('CarEntity');
?>

考察

この例は、基本的な機能を説明しただけのものです。 しかし、これだけでもたとえばデコレータを実装することができるでしょう。 いまどきのオブジェクト指向プログラミングの機能はすべて実装できるようになります。

データベースのデータを簡単に取得・変更するためのオブジェクト指向インターフェイス (Previous) 利用できるメソッドの概要。詳細は、API ドキュメントを参照すること (Next)
Last updated: Tue, 02 Sep 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.