.
EASY CMS: Пишем класс контейнер (PHP, public, is_object).
Автор megabax   
27.05.2010 г.
Структура программы на примере простейшей программы

EASY CMS:  Пишем класс контейнер (PHP, public, is_object).

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


На прошлом уроке мы расшили функционал базового класса ECMS_Base_class и создали шаблоны некоторых других классов, в частности ECMS_Objects_container (контейнер объектов). Сегодня мы как раз начнем реализовывать функционал контейнера: добавление объекта и глобальный поиск по имени. Начнем с того, что в базовый класс добавим публичное свойство owner (выделено красным):

class ECMS_Base_class {
     protected $name = ''; //Имя объекта
     protected $id; //идентификационный код объекта
     protected $hierarchy_classes; //массив иерархии классов
     protected $class_name; //имя класса
     public $owner; //ссылка на владельца

...

Это поле нужно для хранения ссылки на контейнер, в который он помещен.  Так же нам понадобиться в контейнере массив, добавим его в поля класса, а заодно и немного переделаем конструктор (выделено красным) ...

...

... А теперь тестовый пример:

<html>

<head>
     <title>Тест базового класса EASY CMS</title>
    <LINK HREF="ECMS.css" REL="stylesheet" TYPE="text/css">
</head>

<body>

<?php
     include_once("EASYCMSBase.php");
     init_ECMS();

    //проверим добавление и поиск по имени
   $a=new ECMS_Base_class;
   $a->set_name("proba");
   echo ("Переменная a имеет имя ".$a->get_name()."<br>");
   $b=new ECMS_Objects_container;
   $b->set_name('cont');
   $c=$b->add($a);
   echo ("Переменная c имеет имя ".$c->get_name()."<br>");
   $d=$b->global_get_by_name("proba",NULL,true);
   echo ("Переменная d имеет имя ".$d->get_name()."<br>");

   //протестируем проверку уникальности имен
   $a1=new ECMS_Base_class;
   $a1->set_name("proba");
   $b->add($a1);
   $a1->set_name("proba1");
   $c1=$b->add($a1);
   echo ("Переменная c1 имеет имя ".$c1->get_name()."<br>");

   //протестируем поиск внутри вложенных объектов
   $gl=new ECMS_Objects_container;
   $gl->set_name('gl');
   $gl->add($b);
   $a2=new ECMS_Base_class;
   $a2->set_name("proba2");
   $gl->add($a2);
   $d2=$gl->global_get_by_name("proba",NULL,true);
   echo ("Переменная d2 имеет имя ".$d2->get_name()."<br>");

   //протестируем поиск с учетом владельца
   $d3=$b->global_get_by_name("proba2",NULL,true);
   echo ("Переменная d3 имеет имя ".$d3->get_name()."<br>");

   $d4=$b->global_get_by_name("proba3",NULL,true);
   if($d4==NULL) echo ("Имя proba3 не найдено и это правильно<br>");

   $b->add(1);
?>

</body>

</html>

Вот что он должен выдать:

EASY CMS:  Пишем класс контейнер (PHP, public, is_object).

 

Последнее обновление ( 11.01.2011 г. )