Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Выборка непосредственно в объект (DBSimple) (Soid)
Author Message
Soid
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Feb 06, 2007 8:04 am (написано за 5 минут 31 секунду)
   Post subject: Выборка непосредственно в объект (DBSimple)
Reply with quote

Я имел такой код при инициализации объекта:
Code (php): скопировать код в буфер обмена
class User2{
       
        public $login;
        public $password;
        public $param;
       
        function __construct($login,$password){
                global (www.php.net/global) $DB;
               
                $tmp = $DB->selectRow('SELECT
                        login,password,param
                        FROM ?_table
                        WHERE login=? AND password=MD5(?)'
,
                        $login,$password);
               
                if (!empty (www.php.net/empty)($tmp)){
                        $this->login    = $tmp['login'];
                        $this->password = $tmp['password'];
                        $this->param    = $tmp['param'];
                }else return false;
        }
       
}
Естественно параметров param гораздо больше. Я подумал, что неплохо бы загружать поля из запроса сразу в объект и написал функцию в класс DBSimple_Generic:
Code (php): скопировать код в буфер обмена
    /**
     * mixed selectIntoObject(object &$object, string $query [, $arg1] [,$arg2] ...)
     * Execute query and return the result into object properties.
     */

    function selectIntoObject(&$object,$query){
        $args = func_get_args (www.php.net/func_get_args)();
        array_shift (www.php.net/array_shift)($args);
        $total = false;
        $rows = $this->_query($args, $total);
        if (!count (www.php.net/count)($rows)) {
                $object = false;
                return false;
        }
        reset (www.php.net/reset)($rows);
        $rows = current (www.php.net/current)($rows);
        while ( list($property, $value) = each (www.php.net/each)($rows) )
                if (isset (www.php.net/isset)($object->$property))
                        $object->$property = $value;
        return true;
    }
Теперь код инициализации выглядит так:
Code (php): скопировать код в буфер обмена
class User2{
       
        public $login;
        public $password;
        public $param;
       
        function __construct($login,$password){
                global (www.php.net/global) $DB;
               
                $tmp = $DB->selectIntoObject($this,
                        'SELECT
                        login,password,param
                        FROM ?_table
                        WHERE login=? AND password=MD5(?)'
,
                        $login,$password);
        }
       
}
Естественно, при большом количестве параметров улучшение выглядит нагляднее. Интересны комментарии по поводу такой функции, может быть её стоит добавить в дистриб DbSimple?
Back to top
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Wed Feb 07, 2007 12:25 am (спустя 16 часов 21 минуту; написано за 1 минуту 15 секунд)
   Post subject:
Reply with quote

а без регистрации в объекте никак не обойтись? на мой взгляд лучше получить массив в одно поле объекта, чем засорять его пространство имён...
Back to top
View user's profile Send private message
Soid
Заглянувший



Joined: 06 Feb 2007
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Wed Feb 07, 2007 2:57 pm (спустя 14 часов 32 минуты; написано за 23 секунды)
   Post subject:
Reply with quote

В приниципе хорошая идея, так и сделал.
Back to top
View user's profile Send private message
iRabbit
Заглянувший



Joined: 24 Jan 2008
Posts: 3
Карма: 0
   поощрить/наказать

Location: Новосибирск

PostPosted: Sat Jul 19, 2008 8:08 pm (спустя 1 год 5 месяцев 12 дней 5 часов 10 минут; написано за 6 минут 7 секунд)
   Post subject:
Reply with quote

Спасибо автору поста за вдохновение.

Лично я при выборке записей предпочитаю работать с объектами. Пять минут назад прочитал этот пост, а только что написал другую функцию:
Code (php): скопировать код в буфер обмена
/**
     * mixed selectObj(string $query [, $arg1] [,$arg2] ...)
     * Execute query and return the result into object properties.
     */

    function selectObj($query)
    {
        $args = func_get_args (www.php.net/func_get_args)();
        $total = false;
        $rows = $this->_query($args, $total);
        if (is_array (www.php.net/is_array)($rows) && count (www.php.net/count)($rows) > 0) {
                $rowsObj = array (www.php.net/array)();
                foreach ($rows as $key => $row) {
                        $rowsObj[$key] = (object) $row;
                }
                return $rowsObj;
        }
        return NULL;
    }
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML