|
|
|
| Привет всем!
Помогите разобраться с вопросом!
Есть вот такая вот схема построения классов:
<?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() | |
|
|
|
|
|
|
|
для: newmen
(17.08.2008 в 00:26)
| | У вас типичная задача на полиморфизм. Сделайте класс application или какой другой абстрактным и вызывайте в нем абстрактный метод print_test(), а реализацию уже осуществляйте уже в потомках. | |
|
|
|
|
|
|
|
для: cheops
(17.08.2008 в 12:00)
| | Спасибо за помощь! | |
|
|
|
|
|
|
|
для: newmen
(17.08.2008 в 00:26)
| | свойства this->test и this->test1 не прописаны в классе
судя по всему они должны принадлежать application | |
|
|
|