За последние 24 часа нас посетили 19093 программиста и 1643 робота. Сейчас ищут 969 программистов ...

Динамическое наследование методов класса(PHP4)

Тема в разделе "PHP для новичков", создана пользователем 4ert_, 7 май 2008.

  1. 4ert_

    4ert_ Активный пользователь

    С нами с:
    7 май 2008
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте!
    Такая проблема.Есть такая вот схема работы:

    при старте скрипт получает в параметрах имя "модуля", и метод этого модуля. После чего инклудит нужный файл с классом запрашиваемого модуля, и создает экземпляр этого модуля(в каждом модуле срабатывает конструктор), затем запускает запрашиваемый метод. примерно так:

    index.php
    PHP:
    1. include_once ('navigator.class.php');
    2. include_once ('acts.class.php');
    3. $app = new navigator();
    4. $app->run($module,method);

    navigator.class.php
    PHP:
    1. .....
    2. function run($module,$method)
    3. {
    4.   require_once($module."class.php");
    5.   $class=new $module();
    6.   $class->start($method); //функция start() является общей для всех модулей.ниже видно.
    7. }
    8. ....

    Пример модуля(example.class.php):
    PHP:
    1. class example extends acts
    2.  {
    3.     function example()
    4.     {
    5.         ........
    6.         $this->response='the test';
    7.     }
    8.    ..................
    9.  }

    acts.class.php(хранилище всех переменных и функции обработки и вывода сформированной модулями информации)
    PHP:
    1. var $response=null;
    2. .......//все переменные нужные для обработки и вывода информации
    3.    function start($method)
    4.    {
    5.        ....//подготовка данных
    6.        if (!method_exists($this, $method)) {print "error"; exit;}
    7.        $this->$method();
    8.       ....//обработка данных
    9.       print $out;
    10.    }
    11. ......

    Дык вот, схему эту менять совсем не хочется, ибо очень удобно. Но возникла одна проблема, нужно написать модуль(A), для управлениями другими модулями(B), при чем функции управления находятся во вторых.все возможные модули являются потомками класса acts, важно что, чтобы при инициализации B из A, не происходила обнуление переменных класса acts, при этом, при последуещей проверке на наличие метода из класса B в классе A, возращалось true.идеальный вариант:


    PHP:
    1. class A extends acts
    2.   {
    3.         function A()
    4.         {
    5.             $b=new B();
    6.             $this=$b;
    7.          }
    8.    }

    При таком раскладе, все получается идеально, только вот обнуляются значение переменных класса acts(т.к. B является также его потомком).

    Я уже запутался(( никак не могу придумать эдакого посредника, а очень нужно(..

    Направьте на путь истинный уважаемые профессионалы пожалуйста

    Заранее спасибо.
     
  2. 4ert_

    4ert_ Активный пользователь

    С нами с:
    7 май 2008
    Сообщения:
    2
    Симпатии:
    0
    Решил вот так:

    PHP:
    1.  
    2. class A extends acts  
    3.   {  
    4.         function A()  
    5.         {  
    6.             $b=new B();  
    7.             $vars= get_object_vars($this);
    8.              foreach($vars as $key => $v)
    9.              {
    10.                  $b->$key=$v;
    11.              }
    12.              $this=$b;
    13.          }  
    14.    }
    15.