За последние 24 часа нас посетили 22460 программистов и 1637 роботов. Сейчас ищут 894 программиста ...

классы, небольшой изврат

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

  1. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Не знаю как точно назвать тему. Вот суть проблеммы. Есть класс A:
    PHP:
    1. class A {
    2.     static function draw() {
    3.         print 'Привет, МИР!';
    4.     }
    5. }
    Класс B:
    PHP:
    1. class B {
    2.     static function draw() {
    3.         print 'Пока, МИР!';
    4.     }
    5. }
    Как видите оба класса состоят и статических методов. Теперь возьмём класс C:
    PHP:
    1. <?php
    2. class C {
    3.     private $class;
    4.     function __construct($cn) {
    5.         if ($cn == 'A') $this->class = /* Вот что тут написать? */;
    6.         elseif ($cn == 'B') $this->class = /* Вот что тут написать? */;
    7.     }
    8.  
    9.     function write() {
    10.         //Вот что я хочу ;-)
    11.         $this->class::draw();
    12.     }
    13. }
    14. ?>
    В комментах то, что я хочу ;)
     
  2. Anonymous

    Anonymous Guest

    мммм... не уверен насчет передачи методов так.... врать не буду. Сам делаю обычно так: Создаю экземпляр нужного обьекта, передаю главному обьекту ссылку на него, и он его юзает.
    т.е.
    PHP:
    1.  
    2. <?php
    3. $b = new B;
    4. class C {
    5.     private $class;
    6.     function __construct(&$cn) {
    7.      $this->class = $cn;
    8.     }
    9.  
    10.     function write() {
    11.         //Вот что я хочу  
    12.         $this->class->draw();
    13.     }
    14. }
    15. $c = new C($b);
    16. ?>
    17.  
     
  3. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Насколько я знаю статические методы надо вызывать с помошью call_user_func:
    PHP:
    1. <?php
    2.  
    3. $class = "DB";
    4.  
    5. call_user_func (array ($class, "__construct"), $args);