Программирование > PHP

взаимодействие классов

(1/2) > >>

new_coder:
необходимо вызывать методы класса $A из классов $B и $C причем $A не является базовых для $B и $C и не составляет с ними часть одной сущности.



//работа с базой
class $A
{
}

// работа с выводом страниц
class $B
{


     private $DB
     function  __conctructor($DB)
    {
         $this->DB = $DB;
    }

     function metod1()
    {
         $this->DB->metoddb();
    }

}

//работа с модулями
class $C
{
     private $DB
    function __conctructor($DB)
    {
         $this->DB = $DB;
    }

     function metod1()
    {
         $this->DB->metoddb();
    }

}


верное ли это решение или есть другое ?

Altaxar:

--- Цитировать ---class $A
--- Конец цитаты ---

А писать по нормальному можно?
вот пример, так вообще и делается, но только в PHP 5. Но в PHP 4 надо линками передавать обьекты. тоесть на PHP 4 этот пример работать не будет.

class aaa{
private $x=5;
function metoddb($a){
echo $this->x;
$this->x=$a;
}
}
// работа с выводом страниц
class bbb{
     private $DB;
     function  bbb($DB)
    {
         $this->DB = $DB;
    }

     function metod1()
    {
         $this->DB->metoddb(6);
    }
}
//работа с модулями
class ccc{
     private $DB;
    function ccc($DB)
    {
         $this->DB = $DB;
    }

     function metod1()
    {
         $this->DB->metoddb(7);
    }

}
$a=new aaa;
$b=new bbb($a);
$c=new ccc($a);
$b->metod1();
$c->metod1();

new_coder:
я имел ввиду другой способ. Можно не тащить по всему коду в конструкторах указатель на класс $A? (PHP 5)

hanslinger:
Вот она - одна из проблем, вызванных тем, что PHP не типизирован. В нормальном языке, хотя бы в том же ActionScript, хехе, не возникает вопроса, надо ли писать public var x:String, то есть таскать String везде.

Нужно тащить. Обязательно.

new_coder:
нашел подходящее решение с использованием статических методов:

класс $A использует только статические методы, тогда можно писать так:


//работа с базой
class $A
{
public static metodDB()
{
///
}
}

// работа с выводом страниц
class $B
{
function metod1()
{
A::metodDB();
}
 }


//работа с модулями
class $C
{
function metod1()
{
A::metodDB();
}
}

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии