moin,
Ich habe eine Klassengruppe, die, per Instanziierung, einen SQL Teilstring erzeugen. Ich nenne z.B. In, Between, Cases, Arithmetic, LogicContainer aus der Klassengruppe.
Die Klassen sind lose gekoppelt. Einige Klassen können sich gegenseitig, per Consrtructor Injection, aufrufen:
new LogicContainer(
new Between(
/* Params */,
LogicConstant::_AND )
)
Jeder Klasse bekommt, per Constructor Injection mit dazugehörigem Interface (z.B. ExpressionInterface, PredicateInterface, FunctionInterface), Übergabewerte, die sie dann zwischenspeichen und ergänzen $this->addString( $expression->getString() )
, um dann diese Zwischengespeicherten Werte, per Constructor Injection, an den nächsten weiter zureichen.
Alle Klassen müssen über die selben Methoden verfügen:
protected function addString ( string $string ) : void;
public function getString () : string;
Kann man dieses Klassen Gebildes mit Traits oder mit einer Elternklasse realisieren? Ich sehe da Pros & Cons: Hab ihr erfahrungen?
Ich für meinen Teil habs' mit einer abstrakten Elternklasse realisiert, von der alle Klassen erben und dann die Elternklasse mit Traits versehen. So spart man sich gehörig schreibarbeit.
lgmb