MB: Wie Properties aus externen Klassen in Trait bekannt machen?

Beitrag lesen

moin,

ich hab ein kleines Problemchen: ich habe zum training ein CRUD SQL-Klassen angefangen und mit Traits gearbeitet. Zur laufzeit passieren keine Fehler. Ein Code-Block in einer Klasse kann sich ja über Traits, mit use Referenz zur übergeordneten Klasse, auslagern lassen. Ich hab jedoch keine möglichkeit, in diesem Trait, Properties, die ja von einer externen Klasse stammen, irgend wie bekannt zu machen und eine Refferenz zur externen Klasse zu definieren. Klappt zwar auch so aber in meinem weiteren Projekt verlauf ist es sinnvoll irgend wie eine Kopplung hervorzubringen.

Natürlich könnte ich das alles zusammengefasst in eine Klasse schreiben, jedoch verliere ich den Überblick und das ist kein gute Stil und mir ist bewusst, das die eigentliche Funktionsweise von Traits ein wenig von meinem Code abweicht aber nur so schien es mir strukturierter.

Ein Code ausschnitt von meinen Klassen:

class SQLSyntax {

  /**
   * @const int
   */
  const WHERE = // Wert
}
class SQL {
  
  /* Traits */
  use SQLClause;
  use SQLPredicat;

  /**
   * @var string
   */
  private $statement;

  /**
   * @var array
   */
  private $params;

  /**
   * @var array
   */
  private $stack;

  public function execute() : void {
    if( $this->hasOrder() ) {
      // execute
    } else {
      throw new SQLException;
    }
  }

  private function hasOrder() : bool {
    if( /* syntax conditions */ ) {
      return false;
    } else {
      return true;
    }
  }
}
trait SQLPredicat {
  
  // other predicat functions

  public function like( string $col, $pattern ) : string {
    $this->params[] = $pattern;
    return // LIKE Prädikat rückgabe
  }
  
  // other predicat functions

}
trait SQLClause {

  // other clause functions

  public function where( array $conditions ) : SQL {
    $this->stack[] = SQLSyntax::WHERE;
    $this->statement .= "WHERE ";
    // foreach and other stuff
       $this->params[] = $value;
    return $this;
  }
  
  // other clause functions

}

lgmb