кожної такої сторінки недоцільно, тому був створений універсальний шаблон list.tpl. Цей шаблон приймає не конкретні, а загальні дані списку - кількість і назва полів для відображення, таблицю зі значеннями полів, посилання для редагування/завантаження/зміни даних (якщо є) та інше. Більшість сторінок виводиться із застосуванням саме цього шаблону. p align="justify"> Кінцевий користувальницький інтерфейс представлений на малюнку 5.
В
Рис. 5. Скріншот ПС
4.4 Реалізація функціональності програмного засобу
Функціональність нашого програмного засобу реалізується за допомогою декількох класів. Коротко опишемо їх:
) Клас Registry. Реалізує загальний реєстр додатки, в якому зберігаються всі екземпляри класів, глобальні змінні та інше. Даний клас був створений з використанням шаблону проектування «ѳнглтонВ». Цей шаблон гарантує, що у класу є тільки один екземпляр, і надає до нього глобальну точку доступу. Таким чином, ми можемо отримати екземпляр класу Registry з будь-якої точки нашої програми. Використання реєстру в ПС запобігає засмічення глобальної області видимості змінними.
Для запобігання створення екземпляра класу, його конструктор описаний з ключовим словом private, заборонним доступ до конструктора ззовні:
private function __ construct ()
{}
Той же підхід використовується для запобігання клонування екземпляра класу:
private function __ clone ()
{}
Метод getInstance () призначений для повернення єдиного примірника класу, який зберігається в статичному полі $ _instance. Якщо екземпляр ще не створений (у разі першого виклику getInstance), то він створюється:
public static function getInstance ()
{
if (! self :: $ _instance) {
self :: $ _instance = new self;
}
return self :: $ _instance;
}
Всі дані зберігаються в полі-масиві $ vars.
Крім того, даний клас реалізує два інтерфейси: ArrayAccess і Iterator. Це дозволяє використовувати екземпляр класу в якості об'єкта перерахування, а також звертатися до класу як до масиву, що дуже зручно для нашої задачі. Клас реалізує наступні методи, описані в інтерфейсі ArrayAccess: set (), get (), remove (), offsetExists (), offsetGet (), offsetSet (), offsetUnset () і методи, описані в інтерфейсі Iterator: rewind (), current (), key (), next (), valid (). При поводженні з об'єктом як з масивом PHP шукає реалізацію цих методів і прозоро викликає їх. Замість
$ registry-> set ('key', 'value'...