Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

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

 

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

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

тема: Что-то вроде множественного наследования
 
 автор: newmen   (17.08.2008 в 00:26)   письмо автору
 
 

Привет всем!

Помогите разобраться с вопросом!

Есть вот такая вот схема построения классов:
<?php

//Родительский класс
class base{

    var 
$var1;
    var 
$var2;

     
//В данном методе определяем, например переменную $var1
     
function one(){
          
$this->var1 'test var 1';
     }
     
//В данном методе определяем, например переменную $var2
     
function two(){
          
$this->var2 'test var 2';
     }
}

//Класс потомок
class application extends base{

     
//Данный метод определяет дополнительные классы
     
function run(){
         
$this->var1 'var1 переопределилась';
         
$this->var2 'var1 переопределилась';
          
$this->test = new test();
        
$this->test1 = new test1();
     }

     
//Данный метод подгружает что-то типа расширения
     
function extension(){
         
$this->testExtension = new testExtension();
         
$this->testExtension->ext();
     }

}

class 
test{

    function 
print_test(){
        echo 
"Класс test<br>";
    }

}

class 
test1{

    function 
print_test(){
        echo 
"Класс test1<br>";
    }

}

//По идее данный класс должен унаследовать методы классов base и application
//Также переменные $var1 и $var2
//И самое главное дополнительно определенные классы test и test1
class testExtension extends application{

    function 
ext(){
        echo 
"init ext<br>";
        echo 
$this->var1."<br>";
        echo 
$this->var2."<br>";
        
$this->test->print_test();//Не работает при методе run!!!
        
$this->test1->print_test();//Не работает при методе run!!!
    
}

}


$app = new application();//Определяем
$app->run();//Если вместо метода run использовать __construct, данная строчка не нужна!!!
$app->extension();
?>

Нужно запустить класс testExtension из класса application унаследовав ему все методы родительских классов (что-то вроде множественного наследования), в том числе классов test и test1. Если это делать способом, который я описал
$app = new application();//Определяем
$app->run();//Если вместо метода run использовать __construct, данная строчка не нужна!!!
$app->extension();
то это не работает. Если вместо run сделать метод __construct и соответственно, убрать строчку $app->run(); то все замечательно работает, но данный способ не совсем удобен, т.к. при объявлении extends extension будет в классах вызываться __construnct а классов-расширений очень много и поэтому это не самый лучший вариант решения проблемы. Подскажите как можно унаследовать все что я описал выше для класса testExtension

Вобщем проще говоря как унаследовать в классе testExtension все поля, методы и объекты, лпределенные через метод run()

  Ответить  
 
 автор: cheops   (17.08.2008 в 12:00)   письмо автору
 
   для: newmen   (17.08.2008 в 00:26)
 

У вас типичная задача на полиморфизм. Сделайте класс application или какой другой абстрактным и вызывайте в нем абстрактный метод print_test(), а реализацию уже осуществляйте уже в потомках.

  Ответить  
 
 автор: newmen   (18.08.2008 в 02:55)   письмо автору
 
   для: cheops   (17.08.2008 в 12:00)
 

Спасибо за помощь!

  Ответить  
 
 автор: mechanic   (17.08.2008 в 12:06)   письмо автору
 
   для: newmen   (17.08.2008 в 00:26)
 

свойства this->test и this->test1 не прописаны в классе
судя по всему они должны принадлежать application

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

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