Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Можно ли наследовать от двух и более классов?
 
 автор: alex1   (07.10.2010 в 12:39)   письмо автору
 
 

class A extends B, C {
}//class A

  Ответить  
 
 автор: Alph[p]a   (07.10.2010 в 13:00)   письмо автору
 
   для: alex1   (07.10.2010 в 12:39)
 

PHP не поддерживает множественное наследование.

  Ответить  
 
 автор: alex1   (07.10.2010 в 13:20)   письмо автору
 
   для: Alph[p]a   (07.10.2010 в 13:00)
 

Я думал в таком случае ответить: "Ахринеть". А теперь и не знаю, что ответить. Наверное: "Спасибо".

  Ответить  
 
 автор: Alph[p]a   (07.10.2010 в 14:25)   письмо автору
 
   для: alex1   (07.10.2010 в 13:20)
 

используйте интерфейсы..там есть как вариант

  Ответить  
 
 автор: Лена   (07.10.2010 в 21:35)   письмо автору
 
   для: alex1   (07.10.2010 в 13:20)
 

Можно обойти путем перегрузки методов - вызовом __call

<?php
abstract class ABC{
   private 
$link = array(); //массив будет содержать список экземпляров классов

      
protected function _addMethod(ABC $l){
          
//получили имя класса, запихнули класс в массив
            
$this->link[get_class($l)] = $l;
      }

      
//перехватываем методы, которые вызывает класс С
      
public function __call($mtd, array $arg = array()){
               foreach(
$this->link as $l){
                
$l->getMethod($mtd$arg);
               }
      }

      public function 
getMethod($method$arguments){
          return 
call_user_func_array(array($this$method), $arguments);
      }
}

//классы, методы которых наследуются классом С
class extends ABC{
    public function 
writeA(){
        print 
"Метод класса А<br />";
    }

}

class 
extends ABC{
    public function 
writeB(){
        print 
"Метод класса B";
    }
}

//класс-наследник
class extends ABC{
  
//в конструктор запихиваем привязку к классам, которые будут наследоваться
         
public function __construct() {
         
$this->_addMethod(new A);
         
$this->_addMethod(new B);
        }
}

$c = new C;
$c->writeA();
$c->writeB();
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования