.
EASY CMS: Расширение функционала базового класса (PHP, in_array, array_search)
Автор megabax   
14.01.2010 г.
Структура программы на примере простейшей программы

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
Последнее обновление ( 04.01.2011 г. )