Forum Webscript.Ru
Программирование => PHP => Тема начата: 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();
}
}
верное ли это решение или есть другое ?
-
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();
-
я имел ввиду другой способ. Можно не тащить по всему коду в конструкторах указатель на класс $A? (PHP 5)
-
Вот она - одна из проблем, вызванных тем, что PHP не типизирован. В нормальном языке, хотя бы в том же ActionScript, хехе, не возникает вопроса, надо ли писать public var x:String, то есть таскать String везде.
Нужно тащить. Обязательно.
-
нашел подходящее решение с использованием статических методов:
класс $A использует только статические методы, тогда можно писать так:
//работа с базой
class $A
{
public static metodDB()
{
///
}
}
// работа с выводом страниц
class $B
{
function metod1()
{
A::metodDB();
}
}
//работа с модулями
class $C
{
function metod1()
{
A::metodDB();
}
}
-
если класс $A использует только статические методы
-
Не обязательно. Если в методе $A используется $this>xxx,
то и после A::metodDB(); будет работать, только уже с данным классом, иногда очень удобно.
-
Да, я соврал.
Мне стыдно.