Я бы использовал шаблон проектирования Strategy
для этого случая https://designpatternsphp.readthedocs.io/en/latest/Behavioral/Strategy/README.html
Что-то вроде:
interface PdfOperationInterface
{
public function create()
}
class OrderPdfOperation implement PdfOperationInterface
{
public function create()
{
// order logic
}
}
class OfferPdfOperation implement PdfOperationInterface
{
public function create()
{
// offer logic
}
}
обработчик использования или как-то до тех пор, пока можно получить ожидаемый экземпляр операции, например use Factory или Pool of operations et c
class PdfOperationHandler
{
private $operation;
public function __construct(PdfOperationInterface $operation) {
$this->operation = $operation;
}
public function operate()
{
$this-operation->create();
}
}
использование:
$hander = new PdfOperationHandler(new OfferPdfOperation());
$hander->operate();