Вы не зашли.
Главная » PHP » DataObject или велосипед от меня
#1. Nu3oN Off (11)
Moderator
2012.06.16 23:11
В общем задался целью написать велосипед для работы с базой на "методах"...
Готовый класс конечно хорошо, но интересно было повелосипедить...

Для начала планируется:
-Написать синтаксис для основных "операций" типа: select, update, insert, delete
-Организовать возможность работы с такими драйверами как mysql, sqlite, postgre
-Сделать так необходимую для pdo "Multiple" как в mysqli

Стоит ли? или все таки юзать уже готовые классы? (Для себя подходящих я так и не нашел)

В общем начало (пока только начало синтаксиса) сразу извиняюсь за отсутствие комментариев:
Код:
span style="color: #0000BB"><?phpclass DataObject{ private $_select, $_from, $_where; const TABLE_PREFIX = 'nu3on_'; public function __construct() { } public function select() { $arrArgs = func_get_args(); $intTotal = count($arrArgs); if (! $intTotal) { $strArg = '*'; } else if ($intTotal == 1) { $strArg = $arrArgs[0]; } else { $strArg = ''; $intTotal = $intTotal - 1; for ($i=0; $i<=$intTotal; ++$i) { $strArg .= '`' . $arrArgs[$i] . '`'; $strArg .= ($i == $intTotal) ? '' : ', '; } } $this -> _select = 'SELECT ' . $strArg . ' '; return $this; } public function from($strData) { $this -> _from = DataObject :: TABLE_PREFIX . $strData; $this -> _from = 'FROM `' . $this -> _from . '` '; return $this; } public function where($mixData, $strKey=false) { if ($strKey) { $strArg = '`' . $mixData . '` = \'' . $strKey . '\''; } else { if (is_array($mixData)) { $intTotal = count($mixData); if (! $intTotal) { return $this; } else if ($intTotal == 1) { } else { $strArg = ''; $i = 0; foreach ($mixData as $key => $val) { ++ $i; if (is_array($val)) { $strArg .= '`' . $val[0] . '`' . $val[1] . '\'' . $val[2] . '\''; } else { $strArg .= '`' . $key . '`' . ' = \'' . $val . '\''; } $strArg .= ($i == $intTotal) ? '' : ', '; } } } else { throw new Exception('Ошибка синтаксиса в методе where.'); } } $this -> _where = 'WHERE ' . $strArg . ' '; return $this; }}
Код:
span style="color: #0000BB"><?php$dbObj -> select() -> from('test') -> where('id', '1');//SELECT * FROM `nu3on_test` WHERE `id` = '1'$dbObj -> select('a') -> from('test') -> where(array('id' => '1', 'name' =>'val'));//SELECT `a` FROM `nu3on_test` WHERE `id` = '1', `name` = 'val'$dbObj -> select('a', 'b', 'c') -> from('test') -> where(array('id' => '1', array('id', '>', 'val')));// SELECT `a`, `b`, `c` FROM `nu3on_test` WHERE `id` = '1', `id`>'val'
Я буду лучше голоден, но между креслом и рулем и на дороге.
#2. tipsun Off (19)
Moderator
2012.06.16 23:11
Может взять готовое и его чуть изменить, чем все с нуля, там тоже самое наверно должно быть?
#3. Nu3oN Off (11)
Moderator
2012.06.16 23:11
tipsun написал:
Может взять готовое и его чуть изменить, чем все с нуля, там тоже самое наверно должно быть?
примерно да... вот можешь глянуть реализацию одного из... http://pear.php.net/package/DB_DataObject/docs
Я буду лучше голоден, но между креслом и рулем и на дороге.
#4. Gemorroj Off (107)
Administrator
2012.06.17 00:12
Nu3oN, ну как обычно. Покрыть весь SQL, на все СУБД все равно не выйдет. Но как опыт полезно, наверное.
#5. Nu3oN Off (11)
Moderator
2012.06.17 00:12
что-то написал я еще пару методов, "отсоединил" mysql в отдельный класс и подумал отложу ка я это дело на потом big_smile
Я буду лучше голоден, но между креслом и рулем и на дороге.
#6. tipsun Off (19)
Moderator
2012.06.17 10:10
Nu3oN, чего-то я не совсем понял ссылку.
Там самому надо создавать классы Person, Friends и прочее?
Если да, то какой прикол использовать это?
Я, честно говоря, думал это все автоматически генерируется, типа какие поля заданны она как-то там создает объекты и т.д. smile
Вот оно - разочарование big_smile
Сейчас скачаю, может больше пойму.
Отредактировано tipsun (2012.06.17 10:10)
#7. Gemorroj Off (107)
Administrator
2012.06.17 10:10
tipsun, в Doctrine2 можно, например, сгенерить код на основе готовой структуры БД.
#8. tipsun Off (19)
Moderator
2012.06.17 10:10
Gemorroj, сейчас посмотрю.
http://wapinet.ru/forum/uploads.php?file=Doctrine2.png
Явно не для моих мозгов smile
Отредактировано tipsun (2012.06.17 11:11)
#9. Gemorroj Off (107)
Administrator
2012.06.17 11:11
tipsun, ну да, там довольно высокий порог вхождения. прежде чем начать что-то применять на практике, нужно хорошенько зачитать мануалов.
Страниц: 1
Главная
WEB
PunBB Mod v0.6.2
0.014 s