Автор Тема: взаимодействие классов  (Прочитано 4723 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн new_coder

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
взаимодействие классов
« : 19 Ноября 2007, 12:15:57 »
необходимо вызывать методы класса $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

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
взаимодействие классов
« Ответ #1 : 19 Ноября 2007, 15:06:36 »
Цитировать
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

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
взаимодействие классов
« Ответ #2 : 19 Ноября 2007, 16:51:31 »
я имел ввиду другой способ. Можно не тащить по всему коду в конструкторах указатель на класс $A? (PHP 5)

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
взаимодействие классов
« Ответ #3 : 19 Ноября 2007, 16:58:59 »
Вот она - одна из проблем, вызванных тем, что PHP не типизирован. В нормальном языке, хотя бы в том же ActionScript, хехе, не возникает вопроса, надо ли писать public var x:String, то есть таскать String везде.

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

Оффлайн new_coder

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
взаимодействие классов
« Ответ #4 : 19 Ноября 2007, 17:16:15 »
нашел подходящее решение с использованием статических методов:

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


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

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


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

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
взаимодействие классов
« Ответ #5 : 19 Ноября 2007, 18:35:42 »
если класс $A использует только статические методы

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
взаимодействие классов
« Ответ #6 : 20 Ноября 2007, 11:26:34 »
Не обязательно. Если в методе $A используется $this>xxx,
то и после  A::metodDB();  будет работать, только уже с данным классом, иногда очень удобно.
Не все является тем чем кажется.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
взаимодействие классов
« Ответ #7 : 20 Ноября 2007, 13:14:44 »
Да, я соврал.
Мне стыдно.

 

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