ФорумПрограммированиеPHP для идиотов → определение класса потомка в родителе

определение класса потомка в родителе

  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 26 июня 2010 г. 20:42

    собственно задача
    создаем объект
    одно из свойств объекта - имя потомка, который наследует свойства родителя и метод

    собственно не срастается

    class Parent{

    public function __construct(){
    $this->child='Child';
    }

    }

    class Child extends Parent{

    public function __construct(){
    $this->other='bla';
    }

    }

    $obj = new Parent;
    $obj = new Child;

    не наследует, где собака порылась
    Спустя 78 сек.
    пардон последняя строка $obj = new $obj->child;
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 июня 2010 г. 20:52, спустя 9 минут 53 секунды

    Faster, вызови метод родителя то

    function conьstruct()
    {
    parent::__conьstruct();
    $thi->other = 'fullshit';
    }
    Сапожник без сапог
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 26 июня 2010 г. 20:55, спустя 2 минуты 45 секунд

    зачем???

    ps: $childClass = $obj->child;
    $child = new $childClass;
    Work, buy, consume, die
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 26 июня 2010 г. 21:03, спустя 8 минут 23 секунды

    а вот нифига
    пустые свойства, та же байда
    может public где то не написал
    и __construct в потомке как я понимаю не работает
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 июня 2010 г. 21:13, спустя 9 минут 53 секунды

    и __construct в потомке как я понимаю не работае

    плохо ты понимаешь
    Сапожник без сапог
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 26 июня 2010 г. 21:14, спустя 24 секунды

    в чем задача то? конструктор родителя из конструктора ребёнка вывать?

    class Child
    {
       public $other;
       public function __construct()
       {
           parent::__construct();
           $this->other = 'other';
       }
    }
    Work, buy, consume, die
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 26 июня 2010 г. 21:18, спустя 4 минуты 3 секунды

    конструктор родителя определяет потомка
    и по свойству подключаю того или иного потомка
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 26 июня 2010 г. 21:46, спустя 28 минут 33 секунды

    Я не уверен в своих словах и в том, что тебя понял, но вроде:
    public function __construct($child = false){
       if ($child) {
           $this = new $child;
       }
    }

    Как то так.
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 26 июня 2010 г. 23:23, спустя 1 час 37 минут 10 секунд

    SpartakuS,

    Fatal error: Cannot re-assign $this
    Спустя 101 сек.
    Naaayh,
    туплю я чтото.
    если передаю в конструктор родителя переменную
    и эту переменную присваиваю свойству

    получаю в родителе - переменную
    в потомке - NULL

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 27 июня 2010 г. 0:00, спустя 36 минут 47 секунд

    Тогда заюзай метод __call() и method_exists(). Делегированием прием называется, если не ошибаюсь.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 27 июня 2010 г. 0:16, спустя 15 минут 37 секунд

    А бля. Я тя не понял наверное.
    Спустя 40 сек.
    Ты в понятиях класс и объект не запутался случаем?
    Спустя 161 сек.
    Пробуй
    static public $other;

    и вызывать:
    YourClass::$other;
    self::$other;//это если в классе. типа аналог $this->
    Спустя 94 сек.
    Если я не о том, то сформулируй нормально вопрос с примером кода и комментариями типа //тут выводится NULL, а должно быть xxx
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 27 июня 2010 г. 0:25, спустя 9 минут 12 секунд

    туплю я чтото.
    если передаю в конструктор родителя переменную
    и эту переменную присваиваю свойству
     
    получаю в родителе - переменную
    в потомке - NULL

    class Parent
    {
       public $child;
       public function __construct()
       {
           $this->child = 'Child';
       }
    }

    class Child extends Parent
    {
       public $other;
       public function __construct()
       {
           parent::__construct();
           $this->other = 'bla';
       }
    }

    $obj = new Child();
    echo $obj->child; // Child, not NULL
    Если же ты хочешь, чтобы после $obj = Parent(), объект $obj был типа Child, то это бред, интацирование так не должно работать, если сильно надо, то юзай фабрику, к примеру:
    class Parent
    {
       public $test;

       public function __construct()
       {
           $this->test = 'test';
       }

       public static function factory($classSuffix = '')
       {
           $className = 'Parent' . ucfirst($classSuffix);
           if (!class_exists($className))
           {
                throw new Exception("Class {$className} not exists");
           }
           $instance = new $className;
           if (!($instance instanceof Parent))
           {
                throw new Exception("wtf?");
           }
           return $instance;
       }
    }

    class ParentChild extends Parent
    {
       public $other;
       public function __construct()
       {
           parent::__construct();
           $this->other = 'other';
       }
    }

    $p = Parent::factory();
    $c = Parent::factory('Child');

    echo "Parent::test = {$p->test}<br />ParentChild::test = {$c->test}<br />ParentChild::other = {$c->other};

    Work, buy, consume, die
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 27 июня 2010 г. 5:25, спустя 5 часов 5 секунд

    конструктор родителя определяет потомка
    и по свойству подключаю того или иного потомка


    ебаааааттьь….
    я-то думал война закончилась
    и люди наконец выучили базовые вещи

    Если родитель знает о реализации потомка - это большой баг. Родитель ничего не должен знать о потомке.
    не всё полезно, что в swap полезло
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 27 июня 2010 г. 10:48, спустя 5 часов 22 минуты 40 секунд

    >Родитель ничего не должен знать о потомке.
    из контекста не выдирай
    он и не знает
    он определяет нужного потомка
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 27 июня 2010 г. 11:11, спустя 23 минуты 37 секунд

    Faster, он не должен этого делать. он может вообще не знать что у него есть потомки.
    вообще ты бы сформулировал внятно что тебе надо
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!