そろそろ、「何この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);
?>
こうやって使う。
