そろそろ、「何このUbuntuに夢中な無職」と思われそうなのでたまにはPHPのコードを書いてみました。(無職はスルー)

Webアプリで、思い付いた何かを作るのに何がだるいかというと、DB。オブジェクトを次使うときまでとっておきたい(永続化)だけなのに何故こんな面倒臭いか。

設定が要らなくて、ファイルとか吐かないO/Rマッパーはできないものかと思って試しに書いてみた。

<?php
require_once 'DB.php';

class DB_Object_Abstruct
{
    var $_con = null;
    var $_name = "";

    function get($column, $value)
    {
        $row = $this->_con->getRow(
            "SELECT * FROM {$this->_name} WHERE $column = ?" ,
            array($value),
            DB_FETCHMODE_ASSOC
        );
        foreach ($row as $name => $val) {
            $this->$name = $val;
        }
    }
}

class DB_Object
{
    var $dsn = "";

    function DB_Object($dsn = "")
    {
        $this->dsn = $dsn;
    }

    function factory($name)
    {
        eval("class {$name} extends DB_Object_Abstruct { var \$_name = '{$name}'; }");
        $obj =  new $name;
        $con = DB::connect($this->dsn);
        $obj->_con = $con;
        return $obj;
    }
}
?>

まだgetメソッドだけ。 これを、

<?php
require_once 'DB/Object.php';

$dbo = new DB_Object($dsn);
$user = $dbo->factory('user');
$user->get('id', 1);
print_r($user);
?>

こうやって使う。

Comments


Option