Forum Webscript.Ru

Программирование => PHP => Тема начата: new_coder от 19 Ноября 2007, 12:15:57

Название: взаимодействие классов
Отправлено: new_coder от 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 от 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 от 19 Ноября 2007, 16:51:31
я имел ввиду другой способ. Можно не тащить по всему коду в конструкторах указатель на класс $A? (PHP 5)
Название: взаимодействие классов
Отправлено: hanslinger от 19 Ноября 2007, 16:58:59
Вот она - одна из проблем, вызванных тем, что PHP не типизирован. В нормальном языке, хотя бы в том же ActionScript, хехе, не возникает вопроса, надо ли писать public var x:String, то есть таскать String везде.

Нужно тащить. Обязательно.
Название: взаимодействие классов
Отправлено: new_coder от 19 Ноября 2007, 17:16:15
нашел подходящее решение с использованием статических методов:

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


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

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


//работа с модулями
class $C
{
function metod1()
{
A::metodDB();
}
}
Название: взаимодействие классов
Отправлено: hanslinger от 19 Ноября 2007, 18:35:42
если класс $A использует только статические методы
Название: взаимодействие классов
Отправлено: Altaxar от 20 Ноября 2007, 11:26:34
Не обязательно. Если в методе $A используется $this>xxx,
то и после  A::metodDB();  будет работать, только уже с данным классом, иногда очень удобно.
Название: взаимодействие классов
Отправлено: hanslinger от 20 Ноября 2007, 13:14:44
Да, я соврал.
Мне стыдно.