Пока мы не будем расписывать код методов. Взамен просто обозначим его словом "команды" в тексте программы. Вообще говоря, такой способ проектирования, когда сначала решают, какие методы нам нужны, а потом начинают продумывать их код, довольно типичен для ООП.
Листинг 31.1. Эскиз класса таблицы
class MysqlTable {
var $TableName; // Имя таблицы в базе данных
var $Fields; // Массив полей. Ключ — имя поля, значение — его тип
var $Error; // Индикатор ошибки
// Добавляет в таблицу запись $Rec. $Rec должна представлять из себя
// обычный ассоциативный массив. В будущем мы придем к тому, что
// массив $Rec будет представлен даже древовидной структурой,
// т. е. будет иметь подмассивы.
// Как вы понимаете, непосредственной поддержки этого в MySQL нет,
// но мы "ее" реализуем.
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.
Вообще говоря, это один из самых главных приемов ООП (структурного программирования — в меньшей степени) — постоянно размышлять, как бы нам сделать так, чтобы потом можно было побольше "забыть". Работает принцип: если вы используете какой-то класс и не догадываетесь, как он реализован, причем это вам нисколько не мешает, значит, класс хорош.
И наоборот. Впрочем, совсем абстрагироваться от SQL нам все же не удастся — все-таки нужно знать правила составления выражений для выборки и удаления записей, для их сортировки и т. д. Но это уже не SQL, а что-то гораздо более простое и интуитивно понятное.