Какой рейтинг вас больше интересует?
|
Универсальные PHP функции2011-07-18 19:33:38 (читать в оригинале)Сегодня хочу поговорить немного об универсальных функциях. В данном случае это касается PHP. Как всегда тема статьи выходит из проблемы, которую я в своё время решал, а теперь хочу поделиться решением со своими читателями. Итак, проблема. Пишете вы скрипт, в котором должно присутствовать множество сущностей (статьи, товары, категории, заказы и т.д.). Конечно, как грамотный программер, вы разобьёте модели сущностей на классы и приметесь писать для них методы. Получится кучка файлов (M_Articles.php, M_Products.php, M_Categories.php, M_Orders.php). И скорее всего, вам понадобятся стандартные функции, одинаковые для каждой сущности. Например, выборка всех элементов таблицы, выборка или удаление по идентификатору или другому параметру, разбивка элементов на страницы. Можно конечно прописать их для каждой сущности отдельно. Например, GetAllProducts() и GetAllArticles(), GetArticleById() и GetProductById(). Но есть ли в этом смысл? Я предпочитаю написать специальный класс универсальных методов M_DB.php. Это будет библиотека стандартных функций, которые принимают название таблицы в качестве параметра. Для корректного использования этого метода следует следовать определённым правилам:
Это позволяет использовать приведенные ниже функции и не повторять одинаковые функции для каждой сущности. Универсальные функцииДалее просто привожу список некоторых используемых мной функций. Прошу комментировать и критиковать :) Чтение всех элементов из базыpublic function GetAllItems($table){ $query = "SELECT * FROM $table"; return $this->msql->Select($query);} Выбор элемента по идентификаторуpublic function GetItemById($table, $id_item){ $t = "SELECT * FROM $table WHERE id_$table = '%d'"; $query = sprintf($t, $id_item); $result = $this->msql->Select($query); return $result[0];} Выбор элемента по внешнему кодуpublic function GetItemByCode($table, $code_item){ $t = "SELECT * FROM $table WHERE code = '%s'"; $query = sprintf($t, mysql_real_escape_string($code_item)); $result = $this->msql->Select($query); return $result[0];} Выбор элементов по параметруpublic function GetItemsByParam($table, $param, $value){ $t = "SELECT * FROM $table WHERE $param = '%s'"; $query = sprintf($t, mysql_real_escape_string($value)); $result = $this->msql->Select($query); return $result;} Удаление элемента по идентификаторуpublic function DeleteItemById($table, $id_item){ $t = "id_$table = '%d'"; $where = sprintf($t, $id_item); $this->msql->Delete($table, $where); return true;} Удаление элементов по параметруpublic function DeleteItemsByParam($table, $param, $value){ $t = "$param = '%s'"; $where = sprintf($t, mysql_real_escape_string($value)); $this->msql->Delete($table, $where); return true;} Генерация пагинации (разбивка на страницы)Отдаёт массив с общим количеством страниц, позицией начального элемента, значением текущей страницы public function Paginate($table, $page, $num){ // Находим общее количество элементов $query = "SELECT COUNT(*) as count FROM $table"; $result = $this->msql->Select($query); $items = $result[0]['count']; // Если записей нет, то отдаём false if (empty($items)) return false; // Находим общее количество страниц $total = (($items - 1) / $num) + 1; $navi['total'] = intval($total); // Находим начальный элемент // Если значение текущей страницы больше максимального или меньше нуля, то отдаём false $page = intval($page); if (empty($page) or $page < 0) return false; if ($page > $total) return false; $navi['start'] = $page * $num - $num; // Сохраняем также в массив текущую страницу $navi['page'] = $page; return $navi;} Выбор списка элементов с пагинациейНа основании результата работы прошлой функции выбираем элементы из таблицы. public function GetPaginatedList($table, $start, $num){ $t = "SELECT * FROM $table ORDER BY id_$table DESC LIMIT %d, %d"; $query = sprintf($t, $start, $num); return $this->msql->Select($query);} Такие вот функции. Что думаете по этому поводу? Конечно, указанные функции предполагают наличие специальной модели (прослойки) для работы с MySQL. Но мы то давно не пишем сами SQL запросы в функциях. Верно? :) Обмен ссылкамиИльшат написал про советы интернет инвесторам. Я и сам собираюсь заняться инвестированием, потому подобные статьи мне интересны. С уважением, Алексей Опанасенко aka Never Lex.
|
Категория «Download»
Взлеты Топ 5
Падения Топ 5
Популярные за сутки
|
Загрузка...
взяты из открытых общедоступных источников и являются собственностью их авторов.