Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
поли- 
морфизма найдет свое применение. И вот зачем. Мы проектируем класс так, чтобы 
другие классы, которые он будет использовать, подключали его к себе как 
производ- 
ный. Тем самым они наследуют все свойства 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 В то же время имеется возможность добавления/удаления несущих столбцов 
"на лету", т. е. без какого бы то ни было специального запроса пользователя. 
Дос- 
таточно изменить список несущих полей при создании/открытии таблицы. Класс 
сам определяет, что именно измени
 
<<-[Весь Текст]
Страница: из 287
 <<-