За последние 24 часа нас посетили 63008 программистов и 1744 робота. Сейчас ищут 885 программистов ...

динамическое добавление методов в Класс

Тема в разделе "Прочие вопросы по PHP", создана пользователем ZuArt, 28 ноя 2007.

  1. ZuArt

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

    С нами с:
    18 дек 2006
    Сообщения:
    14
    Симпатии:
    0
    Дано:
    - PHP4/5
    - есть некий класс в отдельном файле
    Код (Text):
    1. class CLS
    2. {
    3.  function CLS()
    4.  {}
    5. };
    - есть еще один/несколько файл/ов, в котором/ых описан ряд функций
    Код (Text):
    1. function Func1()
    2. {
    3.  ...
    4. };
    5.  
    6. function Func2()
    7. {
    8.  ...
    9. };
    - есть файл, который инклюдит файл с описанием Класса CLS и "инклюдит" доп. файлы "методов"...
    что-то типа:
    Код (Text):
    1.  
    2. function CreateCLS(&$c)
    3. {
    4.  include_once('file_cls');
    5.  include_once('funcs1');
    6.  include_once('funcs2');
    7.  ...
    8.  include_once('funcsN');
    9.  $c = new CLS();
    10.  return true;
    11. };
    12.  
    13. $c =  null;
    14. if(CreateCLS($c))
    15.  $c->Func1();
    В данном виде это естессно не пашет, т.к. метода Func1() у класса нету, есть глобальная функция, которой быть не должно.....


    Задача - нужно ТАК "проинклюдить" файлы класса и методов, чтобы доп. функции были методами Класса... как вариация, определенный формат файла с описанием Класса и доп. фйлов методов... Работать должно как в PHP4, так и в PHP5... Ну и чтобы подключение такого "Сборного" Класса шло через вызов функции "CreateCLS(&$c)"
    что-то равносильное такому объявлению... и соответственно работу через Класс
    Код (Text):
    1. class CLS
    2. {
    3.  function CLS()
    4.  {}
    5.  
    6.  function Func1()
    7.  {
    8.   ...
    9.  }
    10.  
    11.  function Func2()
    12.  {
    13.   ...
    14.  }
    15. };

    ЗЫ. Наследники возможны, но только если он один и нет последовательного наследования, т.к. файлы методов могут добавляться, удаляться, подключаться вразнобой и случайным образом...

    Вот такая задачка для гуру..... :roll: - скажу честно, я не в силах решить, знаний не хватает - ХЕЛП :(
     
  2. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Под php5, под четвёрку сам, если делать нечего.
    PHP:
    1. <?php
    2. class Test {
    3.     function __construct(){
    4.         $this->var = 'Numbers';
    5.     }
    6.  
    7.     function __call($name, $args){
    8.         if (function_exists($name)){
    9.             array_unshift($args, $this);
    10.             return call_user_func_array($name, $args);
    11.         }
    12.     }
    13. }
    14.  
    15. function SomeFunc($self, $n1, $n2, $n3){
    16.     return sprintf('%s: %d, %d, %d.', $self->var, $n1, $n2, $n3);
    17. }
    18.  
    19. $test = new Test;
    20. echo $test->SomeFunc(1, 2, 3);
    21. ?>
     
  3. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
  4. ZuArt

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

    С нами с:
    18 дек 2006
    Сообщения:
    14
    Симпатии:
    0
    Выход найден

    Нашел более универсальный выход =)))... Причем так, как и хотел - без глобальных функций и лишнего гемороя =)))

    Код выкладывать с комментариями просто лень =(((, опишу алгоритм просто...

    Проверяю наличие файла класса _cls.php

    Если его нету - просто создаю этот файл в папке, простым "парсингом" из других дополнительных файлов функций...

    После чего стандартно include_once(_cls.php);

    Супер пашет - причем кроссплатформенность версий гарантирована[/b]