moin,
schön und klar erklärt aber das weis ich. Meine Frage war aber ne andere. Sorry wenn ich nicht besser ausdrücken kann. Ich hoffer ein Beispiel hilft:
class BarObject {
public $quz;
public $tok
}
trait BazTrait {
public function doSomethingWithObject() : void {
/* any code */;
}
}
class FooModel {
use BazTrait;
private $_barObj;
public function __construct( BarObject $bar ) {
$this->_barObj = $bar;
}
}
$f = new FooModel( new BarObject );
$f->doAnything(
BarObject
soll irgend n Objekt sein und das Trait BazTrait
soll Methoden für Objekte in der Art von BarObject
bereit stellen. Die Frage ist nun: kann man getrost andere Instanzen & Klassen die es schon in FooModel
gibt, im Trait BazTrait
verwenden? Ich mein, dann ist die Gefahr der Kopplung da. Ein weiteres Beispiel an dem Codebeispiel:
trait BazTrait {
public function doSomethingWithObject() : void {
$this->_fuzObj /* any code with FuzObject */;
}
}
class FooModel {
use BazTrait;
private $_barObj;
private $_fuzObj;
public function __construct( BarObject $bar, FuzObject $fuz ) {
$this->_barObj = $bar;
$this->_fuzObj = $fuz;
}
}
Beim Trait BazTrait
habe ich, in der Methode doAnythingWithObject()
, den Code spezifiziert mit $this->_fuzObj
. Im ersten Beispiel ist es gleich wer das Trait BazTrait
verwendet, da es nicht gekoppelt und spezifisch ist, nur ein Objekt eben das das Trait behandelt. Im Zweiten Beispiel ist das nicht der Fall, da entsteht eine kopplung mit der Klasse FooModel
. Und Dahin gehend meine Fragen-Liste in der Eingangsfrage:
- gibt es Konventionen
- Muss man Traits von anderen Klassen & Instanzen abschiermen, sodass sie Autonom sind, oder nicht abschiermen
- wann ist eine Trait Verwendung Sinnvoll
Ich hoffe es ist verständlicher geworden.
lgmb