Сегодня 6 февраля, четверг ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7278
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Заметки вебмастера самоучки
Заметки вебмастера самоучки
Голосов: 1
Адрес блога: http://neverlex.com
Добавлен: 2010-11-08 20:17:13 блограйдером lexnevermind
 

Универсальные 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.

Это будет библиотека стандартных функций, которые принимают название таблицы в качестве параметра.

Для корректного использования этого метода следует следовать определённым правилам:

  • называть таблицы в единственном числе (order, product, article, category)
  • называть идентификатор таблицы как название таблицы с приставкой id_ (id_order, id_product, id_article, id_category)
  • ввести поле code, если хочется часто обращаться к элементам по внешнему коду (хотя это не обязательно, ведь мы можем обращаться к элементами по любому параметру)

Это позволяет использовать приведенные ниже функции и не повторять одинаковые функции для каждой сущности.

Универсальные функции

Далее просто привожу список некоторых используемых мной функций. Прошу комментировать и критиковать :)

Чтение всех элементов из базы

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.
Автор блога Заметки вебмастера самоучки




 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.