master_x
Pitavale XXI wieku
Связь между объектами
У меня существует N количество объектов, все они подгружаются и инициализируются внутри конструктора ядра:
Проблема в том, что мне надо обеспечить связь между всеми загруженными объектами в виде буфера сообщений. Т.е. к примеру внутри себя объект A может записать что-нибудь в буфер, а объект B должен тоже иметь в своем распоряжении содержимое этого буфера. Думал об агрегации тоже. Думал о связях типа actor-server-agent... Придумал четыре кривых варианта:
1) через глобальную переменную (ха-ха)
2) через передачу ссылки на объект MsgBuffer в конструктор вот здесь
3) через функцию
4) вот так:
Понятно, что вариантом 4 можно организовать буфер между всеми объектами... но вот как-то коряво...В общем как лучше?
У меня существует N количество объектов, все они подгружаются и инициализируются внутри конструктора ядра:
PHP:
class Core
{
var $Config;
var $MsgBuffer;
function Core($base_path, $arr_instants=array())
{
...
if(!empty($arr_instants))
{
foreach($arr_instants as $var_name=>$component)
{
($GLOBALS[$var_name]=new $component($this->Config[$component])) or
_fatal_error('Unable to instantiate '.$component.' component, shutting down!', 'CORE');
}
}
}
...
}
1) через глобальную переменную (ха-ха)
2) через передачу ссылки на объект MsgBuffer в конструктор вот здесь
PHP:
$this->MsgBuffer=new MsgBuffer();
($GLOBALS[$var_name]=new $component($this->Config[$component], &$this->MsgBuffer)) or
_fatal_error('Unable to instantiate '.$component.' component, shutting down!', 'CORE');
PHP:
function MsgBuffer()
{
static $Buffer;
...
}
PHP:
$this->MsgBuffer='в отличии от пред. примера это у нас будет не объект а просто строка-буфер';
($GLOBALS[$var_name]=new $component($this->Config[$component])) or
_fatal_error('Unable to instantiate '.$component.' component, shutting down!', 'CORE');
$GLOBALS[$var_name]->MsgBuffer=&this->MsgBuffer;