Программирование > PHP
взаимодействие классов
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();
}
}
Навигация
Перейти к полной версии