| |
поли-
морфизма найдет свое применение. И вот зачем. Мы проектируем класс так, чтобы
другие классы, которые он будет использовать, подключали его к себе как
производ-
ный. Тем самым они наследуют все свойства MysqlTable и добавляют некоторые
свои. Например, класс Guestbook, реализующий гостевую книгу, может быть произ-
водным от MysqlTable и "расширять" его некоторыми дополнительными функция-
ми — например, проверкой орфографии во введенном сообщении или же контролем,
имеет ли право тот или иной пользователь писать в книгу (или он "отключен" за
ис-
пользование ненормативной лексики). Кроме того, прежде чем помещать данные в
Глава 31. Объектно-ориентированное программирование на PHP 465
MySQL-таблицу, наверное, разумным будет их немного "почистить" — убрать лиш-
ние пробелы, HTML-тэги и т. д. Конечно, такой корректировке должны быть подвер-
жены все поля книги. Поэтому класс MysqlTable перед помещением очередной за-
писи в таблицу будет вызывать виртуальную функцию PreModify(), передавая ей в
параметрах запись, которая должна быть откорректирована. Естественно, в классе
Guestbook эта функция должна переопределяться — так, чтобы выполнять требуе-
мые действия по коррекции записи перед ее занесением в таблицу. Конечно, класс
MysqlTable не "знает", как именно будет переопределена PreModify() в производ-
ном от него классе, поэтому сам он содержит функцию PreModify(), не делающую
ничего (то есть с пустым телом).
Думаю, если вы слышите об ООП впервые, это объяснение будет для вас как
китайская грамота. В то же время знатоки сочтут его слишком простым, чтобы
быть достойным этой книги. К сожалению, так получается всегда, когда пыта-
ешься сжатым языком рассказать о чем-то нетривиальном. А я тем временем
еще раз настоятельно рекомендую вам прочитать учебник по ООП, коим ни в
коей мере не является эта книга.
Полноценный класс таблицы MySQL
Я ранее обещал, что в каждой главе части V книги обязательно будет
присутствовать
пример нетривиального кода на PHP, который (или идеи из которого) вы сможете
использовать в своих программах. На этот раз "исходник" оказался особенно боль-
шим, но это с лихвой оправдывается его функциональностью. Сейчас мы с вами раз-
работаем полноценный класс, который существенно облегчает работу с таблицей
MySQL, в значительной степени абстрагируя программиста не только от специфики
этой СУБД, но и вообще от сложностей SQL-запросов. С помощью этого класса даже
начинающий программист сможет построить форум, гостевую книгу, да и вообще
любую программу, которая требует структурированного хранилища данных большого
объема. Правда, для того, чтобы извлекать максимальную выгоду из использования
класса, придется разобраться в механизме наследования, вкратце описанном чуть
выше. Впрочем, класс прекрасно работает и сам по себе. Вот его некоторые
отличи-
тельные черты.
r Кодирование и декодирование данных производится автоматически. Программи-
сту не нужно заботиться о том, чтобы ставить слэши перед апострофами и други-
ми специальными символами. Все, что от него требуется, — передать той или
иной функции массив, представляющий собой запись.
r Таблица является с точки зрения программиста набором записей совершенно про-
извольной структуры (с произвольным числом полей). При создании таблицы ука-
зываются лишь ее несущие поля, по которым можно в будущем вести поиск, сор-
тировку и т. д. Все остальные поля перед помещением записи в таблицу
Часть V. Приемы программирования на PHP 466
подвергаются сериализации, а при чтении из таблицы — восстановлению, "про-
зрачно" для вызывающей программы.
r В то же время имеется возможность добавления/удаления несущих столбцов
"на лету", т. е. без какого бы то ни было специального запроса пользователя.
Дос-
таточно изменить список несущих полей при создании/открытии таблицы. Класс
сам определяет, что именно измени
|
|