верный признак того, что с ооп-ом у вас не всё в порядке - наличие конструкций if декомпозируйте дальше!
хм... видимо я чего-то не догоняю... http://wiki.agiledev.ru/doku.php?id=ooa ... _injection PHP: <?php class readerLocator extends locatorPiece { private $reader; public function getReader() { return $this->reader; } public function setReader(IReader $reader) { $this->reader = $reader; } } class writerLocator extends locatorPiece { private $writer; public function getWriter() { return $this->writer; } public function setWriter(IWriter $writer) { $this->writer = $writer; } } $locator = serviceLocator::getInstance(); $locator->addLocator(new readLocator()); $locator->addLocator(new writeLocator()); $source = $locator->getReader(); $destination = $locator->getWriter(); ?> как в объекте $locator возникают эти методы? $locator->getReader(); $locator->getWriter(); если эти методы изначально прописаны в классе serviceLocator, то для чего такой финт ушами с методом addLocator()?
Xerk Не уверен, но возможно, локаторов можно подцеплять несколько, типа связки. И когда ты обращаешься к сервисЛокатору, он последовательно опрашивает вложенные объекты. Графоманство все это, имхо Если вам нужна хорошая изоляция частей системы друг от друга - ну так сделайте событийную систему, как в Delphi. Намного проще и понятнее, чем все эти инжекторы-локаторы.
Эм, если я правильно понял - он ищет первый попавшийся вложенный обьект у которого есть метод, в данном примере getReader() или getWriter(), и вызывает этот метод?
PHP: <?php class Locator ... public function addLocator($locator) { foreach ($locator->getMethods() as $method) { // get_class_methods $this->methods[$method] = $locator; } } public function __call($method, $args) { if (isset($this->methods[$method])) { return $this->methods[$method]->$method; } } Сильно упрощая, получается как-то так.