Практическо приложение на ООП в PHP5, PHP
Ето защо, за краткост, дизайнът на сайта се поставя директно в изходния код, въпреки че, разбира се, е по-добре да използвате шаблони. Освен това, поради краткостта на статията, ще се съсредоточа върху писането на код на PHP, така че дизайнът на практика ще отсъства. Доста често срещах статии за ООП в PHP5, но всички те бяха от някакъв вид абстрактно естество и в най-добрия случай косвено свързани със създаването на сайтове, в тази статия ще покажа как да използвам ООП за създаване на сайтове.
Днес PHP често се използва за разработване на уебсайтове. Поддръжката на PHP за OOP (обектно ориентирано програмиране) е значително подобрена в последната версия 5. Много програмисти обаче използват само най-примитивните функции на ООП, като например капсулиране на данни, когато създават уебсайтове. Разбира се, това използване на ООП прави кода по-добър, но използвайки други функции на ООП, можете да постигнете по-голям ефект.
Използването на полиморфизъм и наследяване може значително да намали кода, като същевременно го направи по-надежден. Освен това такъв код често може да се използва повторно.
Домашна страница на Вася Пупкин
Ще направим страницата на Вася Пъпкин. В горната част на страницата трябва да има голям надпис „Началната страница на Вася Пюпкин“ (обикновено това е логото на сайта).
Това е последвано от меню, състоящо се от следните раздели: Начална страница, Биография, Връзки. Текстът на раздела върви в средата на страницата.
За удобство менюто е дублирано в долната част.
Сайтът ще се състои от четири основни файла:
Ще съхраняваме всички наши класове в спомагателен файл.
Рамка на сайта
Първо, нека да определим, че страницата ще бъде клас за нас.
Нека дефинираме абстрактен клас HTML страница във файла html.php:
Нека да видим за какво служи всеки метод:
Име на метода | Цел на метода |
функция __construct($Title) | Създаване и инициализиране на обект (в нашия случай задаване на име на страница). |
functionBeginHTML() | Изходящ хедър на html файл. |
функция EndHTML() | Извеждане на края на html файла. |
лого на функцията() | Извеждане на логото на сайта. |
функция Меню() | Изход от главното меню на сайта. |
абстрактна функция MainText() | Показване на основното съдържание на уеб страница. |
функция Write() | Изобразяване на уеб страница, използване на методи за изобразяване на отделни елементи от уеб страница. |
Някои от методите се използват за показване на отделни елементи на страницата, като менюта, лога и т.н. В метода Write всички тези функции се извикват за отпечатване на цялата страница. Особено внимание трябва да се обърне на абстрактния метод MainText. Този метод се нарича абстрактен, защото не е имплементиран в този клас, а само е деклариран. Този метод ще бъде заменен и внедрен в дъщерни класове. Така че на страницата с връзки в този метод ще се показват връзки, а на страницата с биография - текстът на биографията на Вася Пупкин. Самият клас също е деклариран като абстрактен, така че ще бъде невъзможно да се създадат екземпляри на такъв клас.
Променливата $Title е декларирана в класа със защитен обхват, тоест достъпът до нея може да бъде получен или от самия клас, или от неговите наследници.
Сега остава да създадем останалите три файла. Ще покажа как това може да се направи с помощта на index.php като пример:
В този случай той просто създава нов клас IndexPage, който произлиза от класа HTMLPage и замества метода MainText за показванеосновното съдържание на страницата. За по-голяма яснота ще дам диаграма на класовата йерархия
Ползите от използването на ООП ще бъдат по-големи, колкото по-голям е сайтът. Освен това, задължително, в хода на работата, изискванията към сайта ще се променят. Например може да се наложи да добавите нова страница. За да направите това, всичко, което трябва да направите, е да създадете нов файл с клас, извлечен от HTMLPage, да замените метода MainText и да създадете съответния елемент от менюто. Ето как може да се използва наследяването. Също така ще бъде лесно да промените дизайна на всички страници - всички промени ще се появят в класа HTMLPage, други страници ще наследят дизайна автоматично.