Структура программы на примере простейшей программы
EASY CMS:
Расширение функционала базового класса (PHP, in_array,
array_search)
Что бы смотреть урок полностью, подпишитесь на
платный раздел.
В платном разделе статья находиться
здесь.
На прошлом уроке мы сделали базовый класс, который может хранить
уникальный идентификатор объекта (который получает автоматически при
создании) и уметь выводить сообщение об ошибке. Сегодня мы добавим в него
возможность проверки иерархического подчинения, а именно функции проверки,
является ли тот или иной класс родительским или дочерним классом от другого.
И так, разберем сперва глобальную функцию search_from_array -
поиск в массиве.
- Есть же in_array и array_search, - скажите вы, зачем еще
свою функции писать?
Да, действительно, есть в PHP такие
функции. Но нам нужно искать не во всем массиве, а только в его первых
n элементах. Поэтому и делаем вспомогательную
функцию...
...
.... В конструкторе каждого дочернего класса обязательно предусмотрим
обновление его имении добавление его в массив:
class ECMS_Image_service
extends ECMS_Base_class {
function __construct() {
parent::__construct();
$this->class_name='ECMS_Image_service';
$this->add_to_hierarchy($this->get_class_name());
} |
...
...Теперь о тестировании. Тестовый пример, который вы
закачаете вместе с полным текстом программы, должен выдать следующее:
Тест id
base_class.id=0
base_class2.id=1
container.id=2
image_service.id=3
Вывод ирерахии
Array ( [0] => ECMS_Base_class )
Array ( [0] => ECMS_Base_class [1] => ECMS_Objects_container )
Array ( [0] => ECMS_Base_class [1] => ECMS_Image_service )
Array ( [0] => ECMS_Base_class [1] => ECMS_Objects_container [2] =>
ECMS_Visual_object )
Тестируем методы определения дочерности родительности
Test class: ECMS_Base_class
base_class is not child of ECMS_Base_class
base_class is child or self of ECMS_Base_class
base_class is not child of base_class2
base_class is child or self of base_class2
base_class is not parent of base_class2
base_class is parent or self of base_class2
base_class is not child of ECMS_Objects_container
base_class is not child or self of ECMS_Objects_container
base_class is not child of container
base_class is not child or self of container
Test class ECMS_Objects_container
container is child of ECMS_Base_class
container is child or self of ECMS_Base_class
container is child or self of ECMS_Objects_container
container is not child or self of ECMS_Image_service
container is not child or self of ECMS_Visual_object
container is not parent of base_class
container is parent visual
Test class ECMS_Visual_object
visual is not parent of base_class
visual is not parent of image_service |
|