作り途中だけど使ってみたら早速問題が出た。これを使ってできたインスタンスをセッションに入れたらエラーが出る。そりゃそうか。 定義だけするメソッドを追加。
    function defineClass($name)
    {
        $class = "class {$name} extends DB_Object_Abstract { var \$_name = '{$name}'; }";
        eval($class);
    }
簡単に二重定義になったのでinclude_once的なものも追加。
    function defineClassOnce($name)
    {
        if (!class_exists($name)) {
            DB_Object::defineClass($name);
        }
    }
DBのconnectionが含まれてるから使うときはこんな感じで書くしかないか。
ini_set('unserialize_callback_func', 'autoload');
function autoload()
{
    <strong>include_once 'DB/mysql.php';</strong>
    include_once 'DB/Object.php';
    DB_Object::defineClassOnce('user');
}
キモいぃ。
以下全文。
<?php
require_once 'DB.php';
class DB_Object
{
    var $dsn = "";
    function DB_Object($dsn = "")
    {
        $this->dsn = $dsn;
    }
    function factory($name)
    {
        DB_Object::defineClassOnce($name);
        $obj =  new $name;
        $con = DB::connect($this->dsn);
        $obj->_con = $con;
        return $obj;
    }
    function defineClass($name)
    {
        $class = "class {$name} extends DB_Object_Abstract { var \$_name = '{$name}'; }";
        eval($class);
    }
    function defineClassOnce($name)
    {
        if (!class_exists($name)) {
            DB_Object::defineClass($name);
        }
    }
}
class DB_Object_Abstract
{
    var $_con = null;
    var $_res = null;
    var $_name = '';
    var $_key = 'id';
    function get($column, $value)
    {
        $row = $this->_con->getRow(
            "SELECT * FROM {$this->_name} WHERE $column = ?" ,
            array($value),
            DB_FETCHMODE_ASSOC
        );
        if (is_array($row)) {
            foreach ($row as $name => $val) {
                $this->$name = $val;
            }
        }
    }
    function insert()
    {
        $fields = array();
        foreach ($this as $name => $value) {
            if (!preg_match('/^_.*/', $name)) {
                $fields[$name] = $value;
            }
        }
        $this->_con->autoExecute($this->_name, $fields);
    }
    function update()
    {
        $fields = array();
        foreach ($this as $name => $value) {
            if (!preg_match('/^_.*/', $name)) {
                $fields[$name] = $value;
            }
        }
        $where = $this->_key . ' = ' . $this->{$this->_key};
        $this->_con->autoExecute($this->_name, $fields, DB_AUTOQUERY_UPDATE, $where);
    }
    function delete()
    {
        $where = $this->_key . ' = ' . $this->{$this->_key};
        $this->_con->query('DELETE FROM ' . $this->_name . ' WHERE ' . $where);
    }
    function query($sql)
    {
        $this->_res = $this->_con->query($sql);
    }
    function find()
    {
    }
    function fetch()
    {
    }
}
?>
空のメソッドとか泣ける。
