Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Не получили
письмо с кодом активации
?
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Начало
Помощь
Поиск
Календарь
Вход
Регистрация
Forum Webscript.Ru
»
Программирование
»
PHP
»
взаимодействие классов
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
Вниз
Автор
Тема: взаимодействие классов (Прочитано 4739 раз)
0 Пользователей и 1 Гость просматривают эту тему.
new_coder
Завсегдатай
Новичок
Сообщений: 33
+0/-0
0
взаимодействие классов
«
:
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
взаимодействие классов
«
Ответ #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
взаимодействие классов
«
Ответ #2 :
19 Ноября 2007, 16:51:31 »
я имел ввиду другой способ. Можно не тащить по всему коду в конструкторах указатель на класс $A? (PHP 5)
Записан
hanslinger
H2Oer
Ветеран
Сообщений: 1148
+0/-0
2
взаимодействие классов
«
Ответ #3 :
19 Ноября 2007, 16:58:59 »
Вот она - одна из проблем, вызванных тем, что PHP не типизирован. В нормальном языке, хотя бы в том же ActionScript, хехе, не возникает вопроса, надо ли писать public var x:String, то есть таскать String везде.
Нужно тащить. Обязательно.
Записан
new_coder
Завсегдатай
Новичок
Сообщений: 33
+0/-0
0
взаимодействие классов
«
Ответ #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
взаимодействие классов
«
Ответ #5 :
19 Ноября 2007, 18:35:42 »
если
класс $A использует только статические методы
Записан
Altaxar
Фанат форума
Постоялец
Сообщений: 222
+0/-0
0
взаимодействие классов
«
Ответ #6 :
20 Ноября 2007, 11:26:34 »
Не обязательно. Если в методе $A используется $this>xxx,
то и после A::metodDB(); будет работать, только уже с данным классом, иногда очень удобно.
Записан
Не все является тем чем кажется.
hanslinger
H2Oer
Ветеран
Сообщений: 1148
+0/-0
2
взаимодействие классов
«
Ответ #7 :
20 Ноября 2007, 13:14:44 »
Да, я соврал.
Мне стыдно.
Записан
Печать
Страницы: [
1
]
Вверх
« предыдущая тема
следующая тема »
Forum Webscript.Ru
»
Программирование
»
PHP
»
взаимодействие классов
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