У меня есть несколько таблиц, настроенных в Propel, с генерируемыми статическими классами Peer.Простые статические классы: как избежать дублирования кода?
Моя проблема в том, что мне нужно выполнить ту же операцию поиска на разных, но похожих таблицах. Эти таблицы имеют разные классы равный-равному, так как работает Propel. Эта ситуация приводит к дублированию кода в отношении запросов, которые выполняются в этих таблицах.
Мне было интересно, существует ли какая-либо конструкция (избегая использования функции eval
), которая может помочь мне в этом случае; Я действительно хотел бы избежать написания дублированного кода, который выполняет те же самые точные вызовы только для разных статических классов Peer.
примера фрагмент код из (очень долго) методы класса я пишу:
$criteria = new Criteria();
$criteria->add(FoobarPeer::CONTRACTNR,$data['contractnr']);
$result = FoobarPeer::doSelect($criteria);
if(count($result) > 1){
throw new FoobarException("status: more than one row with the specified contractnr.");
}
if(count($result) == 0){
// no object with given contractnr. Create new one.
$obj = $this->factory->createORM("foobar");
$obj->setCreatedAt(time());
} else {
// use and update existing object.
$obj = $result[0];
}
Как вы можете видеть, что я успел написать фабричный метод для объекта строки, но я не мог найти способ сделать то же самое для статических классов. Другими словами, я хотел бы иметь доступ к динамическим статическим классам, а не к уродливому обходному пути.
Любые идеи?
спасибо :)
Спасибо за ваш ответ, у меня есть вопрос: если peer_for - это метод, определенный в объекте, как его назвать? Может быть, вот так ?: $ peer = $ ($ obj-> peer_for ($ type)) – fstab