Класс 1 + класс 2 = класс 3

StalkerClasses

Новичок
У меня есть два класса - возможно ли как-то 3 класс унаследовать от второго и первого?
Т.е. сделать двойное наследование?

Будет ли работать
PHP:
class My3 extended class My1 {
   __construct(){
      if(услование){
         $this= class My2 // перезатираем методы класса 1 на класс 2
      }
   }
}
 

Adelf

Administrator
Команда форума
Возможно тебе стоит открыть для себя интерфейсы и "фабричный метод"(погугли) например.
 

Yoskaldyr

"Спамер"
Партнер клуба
Немного подкину вредных советов - можешь попробовать применить анонимные классы.
В конструкторе конечно не получится но в каком-то фабричном методе, почему бы нет...

P.S. Хотя почти все темы от ТС из разряда извра и бдсм, так что полезные советы уже давно закончились :)
 

Yoskaldyr

"Спамер"
Партнер клуба
Анонимные классы можно еще в рантайме через eval генерить - гулять так гулять :)
Хеппи дебагин мазафака :)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Мне вот больше интересно нафига ему множественное наследование?
 

Yoskaldyr

"Спамер"
Партнер клуба
Ох сочувствую тому кто будет работать с этим кодом после...
@StalkerClasses что-то типа eval('$var = new class { ... }'); Вместо ... тело класса строкой. Как ты будешь генерить эту строку - это уже тебе решать. В результате внутри $var будет твой уникальный класс.
 

Adelf

Administrator
Команда форума
Небо… небо не видело такого злого пацака как ты, @Yoskaldyr!.. Я очень глубоко скорблю…
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
вместо наследования
PHP:
class My3 extended class My1 {
   __construct(){
      if(услование){
         $this= class My2 // перезатираем методы класса 1 на класс 2
      }
   }
}
надо использовать композицию, ничего нового

PHP:
class MyStrategy {
   private $target;
   public function __construct(M1 $m1, M2 $m2){
      if(услование){
         $this->target = $m2; // используем методы класса 2
      }else {
         $this->target = $m1;
     }
  }
  public funtion __call(...$args) {
      return call_user_function([$this->target,__FUNCTION__],$args)
  }
}
 

StalkerClasses

Новичок
grigori спасибо большое за ответы - очень приятно что есть ответы в которых есть что подчерпнуть.


1) Где-то еще предлагали eval интересно посмотреть и этот вариант.

2) И еще вопрос, полагаю теперь что мне было бы вполне достаточно сделать

Идет обращение к классу: MyHelper. Класс физически сущесвтует.
Идет обращение к классу MyHelper2 - его не существует. Мы перидываем (или делаем alias) на класс MyHelper. В нем мы понимаем что мы обратились как к классу MyHelper2.
 
Сверху