| |
Fields; // Массив полей. Ключ — имя поля, значение — его тип
var $Error; // Индикатор ошибки
. . .
}
Согласитесь, это почти все данные, которые должны храниться в объекте-таблице.
Все
остальное (например, записи) находится в базе данных. Нам нужно научиться
каким-то
образом легко извлекать и добавлять (а также удалять, подсчитывать и обновлять)
эти
записи путем простых запросов к объекту-таблице. Для этого я предлагаю написать
соот-
ветствующие методы (листинг 31.1).
Пока мы не будем расписывать код методов. Взамен просто обозначим его
словом "команды" в тексте программы. Вообще говоря, такой способ проекти-
рования, когда сначала решают, какие методы нам нужны, а потом начинают
продумывать их код, довольно типичен для ООП.
Листинг 31.1. Эскиз класса таблицы
class MysqlTable {
var $TableName; // Имя таблицы в базе данных
var $Fields; // Массив полей. Ключ — имя поля, значение — его тип
var $Error; // Индикатор ошибки
// Добавляет в таблицу запись $Rec. $Rec должна представлять из себя
// обычный ассоциативный массив. В будущем мы придем к тому, что
// массив $Rec будет представлен даже древовидной структурой,
// т. е. будет иметь подмассивы.
// Как вы понимаете, непосредственной поддержки этого в MySQL нет,
// но мы "ее" реализуем.
Часть V. Приемы программирования на PHP 458
function Add($Rec) { команды; }
// Возвращает массив записей (ключ — id записи, значение —
// ассоциативный массив, в точности такой же, какой был помещен
// некогда в таблицу при помощи Add), удовлетворяющих выражению
// $Expr. Возвращаются только первые $Num (или менее) записей.
// Сортировка осуществляется в соответствии с критерием $Order.
function Select($Expr,$Num=1e10,$Order="id desc") { команды; }
// Удаляет из таблицы все записи, удовлетворяющие выражению $Expr.
function Delete($Expr) { команды; }
// Удаляет из таблицы все записи (например, при помощи вызова
// Delete("1=1") и удаляет саму таблицу из базы данных. Этот
// метод довольно опасен!
function Drop() { команды; }
}
Пока, пожалуй, хватит. Я не буду здесь углубляться в то, как устроен каждый из
на-
званных методов. Этим мы займемся в свое время. А пока обратите внимание на то,
что мы попытались определить все операции, которые вообще применимы к таблице
MySQL (на самом деле, это далеко не полный их перечень, но пока нам и такого
ко-
личества вполне достаточно). Это очень важно, потому что потом, когда будем ис-
пользовать объекты класса MysqlTable, мы сможем вообще забыть, что такое
MySQL и язык запросов SQL, или поручить разработку программы, обращающейся к
MysqlTable, человеку, не разбирающемуся в SQL.
Вообще говоря, это один из самых главных приемов ООП (структурного программи-
рования — в меньшей степени) — постоянно размышлять, как бы нам сделать так,
чтобы потом можно было побольше "забыть". Работает принцип: если вы используете
какой-то класс и не догадываетесь, как он реализован, причем это вам нисколько
не
мешает, значит, клас
|
|