Hallo,
ich habe ein Problem mit abstrakten Methoden innerhalb von Traits und komme nicht weiter.
Ich habe 2 Traits, in denen jeweils eine abstrakte Methode enthalten ist. Beide abstrakten Methoden haben den gleichen Namen. Um sie in meiner Klasse "schöner" verfügbar zu machen, habe ich noch einen "Hilfs-Trait" zugefügt. Hier möchte ich den beiden gleichnamigen abstrakten Methoden unterschiedliche Namen geben. Die Implementierung der abstrakten Methoden soll jedoch erst in der Klasse statt finden (oder später sogar in abgeleiteten Klassen, z.B. LangsamesAuto, SchnellesAuto).
Hier der (nicht lauffähige) Code:
ich habe ein Problem mit abstrakten Methoden innerhalb von Traits und komme nicht weiter.
Ich habe 2 Traits, in denen jeweils eine abstrakte Methode enthalten ist. Beide abstrakten Methoden haben den gleichen Namen. Um sie in meiner Klasse "schöner" verfügbar zu machen, habe ich noch einen "Hilfs-Trait" zugefügt. Hier möchte ich den beiden gleichnamigen abstrakten Methoden unterschiedliche Namen geben. Die Implementierung der abstrakten Methoden soll jedoch erst in der Klasse statt finden (oder später sogar in abgeleiteten Klassen, z.B. LangsamesAuto, SchnellesAuto).
Hier der (nicht lauffähige) Code:
PHP-Code:
trait Bremse {
abstract public function gibMeldung();
public function bremsen() {
echo "Ich bremse ...<br />";
}
}
trait Beleuchtung {
abstract public function gibMeldung();
public function blinken() {
echo "Ich blinke ...<br />";
}
}
trait HilfTrait {
use Bremse, Beleuchtung {
Bremse::bremsen as autoBremsen;
Beleuchtung::blinken as autoBlinken;
Bremse::gibMeldung as bremseGibMeldung;
Beleuchtung::gibMeldung as beleuchtungGibMeldung;
}
}
class Auto {
use HilfTrait;
public function bremseGibMeldung() {
echo "Meldung von der Bremse.<br />";
}
public function beleuchtungGibMeldung() {
echo "Meldung von der Beleuchtung.<br />";
}
public function beschleunigen() {
echo "Ich beschleunige ...<br />";
}
}
$auto = new Auto();
$auto->beschleunigen();
$auto->autoBremsen();
$auto->autoBlinken();
$auto->bremseGibMeldung();
$auto->beleuchtungGibMeldung();
Kommentar