Wsc
Guest
Взаимодействие объектов
Опять же вопрос про взаимодействие объектов.
пример для онлайн-тестирования(упрощенно).
Допустим есть сущности: вопрос, ответ, тест, прогресс, протокол, пользователь.
Все они завязаны между собой, вариант как было написано в соседней ветке, типа:
$test=new Test($_GET['id']);
$user=new TestUser($_GET['uid']);
$progress=new Progress($test->getVar('tid'));
$progress->setVar('user_id',$user->getVar('user_id');
$progress->store();
мне не очень нравится.
Как я сделал.
написал малюсенький класс-фэктори, который либо инициализирует объект, либо возвращает экземпляр объекта в случае его существования.
т.е. примерно так:
class TestFactory{
function &getClass($name,$parameter=null){
static $instances;
if (!isset($instances[$name])) {
$class = ucfirst($name);
$instances[$name] = new $class($parameter);
}
return isset($instances[$name]) ? $instances[$name] : false;
}
Соотв. теперь иниц. объекты через фабрику, т.е.
$test=&TestFactory::getClass("Test",$_GET['id']);
$testuser=&TestFactory::getClass("TestUser",$_GET['uid']);
$progress=&TestFactory::getClass("Progress",$test->getVar('tid'));
$progress->store();
а в классе Progress я назначаю свойства объекта вида:
class Progress {
function Progress($id=null){
$this->test=&TestFactory::getClass("Test");
$this->user=&TestFactory::getClass("TestUser");
.....
}
и соотв. имею доступ ко всем свойствам и методам этих ранее объявленных и инициализированных классов внутри класса Progress.
Извиняюсь за длинное повествование, но хотелось бы услышать мнение завсегдатаев форума и остальных посетителей.
Опять же вопрос про взаимодействие объектов.
пример для онлайн-тестирования(упрощенно).
Допустим есть сущности: вопрос, ответ, тест, прогресс, протокол, пользователь.
Все они завязаны между собой, вариант как было написано в соседней ветке, типа:
$test=new Test($_GET['id']);
$user=new TestUser($_GET['uid']);
$progress=new Progress($test->getVar('tid'));
$progress->setVar('user_id',$user->getVar('user_id');
$progress->store();
мне не очень нравится.
Как я сделал.
написал малюсенький класс-фэктори, который либо инициализирует объект, либо возвращает экземпляр объекта в случае его существования.
т.е. примерно так:
class TestFactory{
function &getClass($name,$parameter=null){
static $instances;
if (!isset($instances[$name])) {
$class = ucfirst($name);
$instances[$name] = new $class($parameter);
}
return isset($instances[$name]) ? $instances[$name] : false;
}
Соотв. теперь иниц. объекты через фабрику, т.е.
$test=&TestFactory::getClass("Test",$_GET['id']);
$testuser=&TestFactory::getClass("TestUser",$_GET['uid']);
$progress=&TestFactory::getClass("Progress",$test->getVar('tid'));
$progress->store();
а в классе Progress я назначаю свойства объекта вида:
class Progress {
function Progress($id=null){
$this->test=&TestFactory::getClass("Test");
$this->user=&TestFactory::getClass("TestUser");
.....
}
и соотв. имею доступ ко всем свойствам и методам этих ранее объявленных и инициализированных классов внутри класса Progress.
Извиняюсь за длинное повествование, но хотелось бы услышать мнение завсегдатаев форума и остальных посетителей.