Эта тема на forum.dklab.ru


iliсh: Доступ к бд как к массиву
в php5 есть возможность обращаться в объекту как к массиву
решил на основе этого упростить работу с БД, сделал небольшой тест для проверки такой возможности
существуют ли похожие реализации?
и с какими проблемами можно столкнутся при таком подходе?
из проблем вижу - возможно большое количество запросов (можно решить) и запросы с join

код написан для проверки возможности, а не практического применения, просьба за него особо не пинать

<?
class inDB extends ArrayObject
{
var $db_id;
function __construct()
{
$this->db_id = db_connect();
}

function offsetGet($table)
{
return new inTable($table);
}
function append(){}
function count(){}
function getIterator(){}
function offsetExists($i){return true;}
function offsetSet($i, $v){}
function offsetUnset($i){}
}

class inTable extends ArrayObject
{
var $db;
function __construct($table)
{
$this->table = $table;
}

function offsetGet($id)
{
return new inRow($this->table, $id);
}

function GetList($condition='')
{
$sql = 'select id from '.$this->table.$condition;
$list = exec_sql2array($sql);
$arr = array();
foreach ($list as $r)
{
$arr[] = new inRow($this->table, $r['id']);
}
return $arr;
}
function append(){}
function count(){}
function getIterator(){}
function offsetExists($i){return true;}
function offsetSet($i, $v){}
function offsetUnset($i){}
}

class inRow extends ArrayObject
{
var $table;
var $id;
function __construct($table, $id)
{
$this->table = $table;
$this->id = $id;
}

function offsetSet($field, $val)
{
$sql = sp('update '.$this->table.' set '.$field.'=? where id=?', $val, $this->id);
exec_sql($sql);
}
function offsetGet($field)
{
return get_field($this->table, $field, sp(' where id=?', $this->id));
}
function append(){}
function count(){}
function getIterator(){}
function offsetExists($i){return true;}
function offsetUnset($i){}
}
?>


использование выглядит так

<?
$db = new inDb();
echo $db[$anons_table][20]['name'].'<br>';
$db[$anons_table][20]['name'] = 'test record';
echo $db[$anons_table][20]['name'].'<br>';

$list = $db[$anons_table]->GetList();
foreach ($list as &$row)
{
echo $row['name'].'<br>';
}
?>

Эта тема на forum.dklab.ru