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