PHP-Vererbung: Unterklasse überschreiben übergeordnete variable/Eigenschaft für die Verwendung im Konstruktor
Habe ich eine (abstrakte) Basisklasse sollen Funktionen anbieten, die während der Bauphase. Kind-Klassen außer Kraft setzen können, - Eigenschaften im Konstruktor:
class Parent extends MiddlewareTest
{
//abstract channel properties
protected $title = NULL;
protected $type = NULL;
protected $resolution = NULL;
function __construct() {
parent::__construct();
$this->uuid = $this->createChannel($this->title, $this->type, $this->resolution);
}
}
class Child extends Parent
{
//channel properties
protected $title = 'Power';
protected $type = 'power';
protected $resolution = 1000;
}
Problem ist, dass die überschriebene Eigenschaften werden nicht verwendet, wenn Child::__construct()
die nicht überschrieben läuft ($this->createChannel
heißt mit NULL
Parameter).
Ist das möglich in PHP oder muss ich zurückgreifen auf Kind überschreiben Konstruktoren jeder Zeit zur Bereitstellung der gewünschten Funktionalität?
Anmerkung: ich sah Gemeinsamen Eigenschaften zwischen Kind und Eltern Klasse in php aber diese ist anders als das Kind Eigenschaften, die nicht zugeordnet sind, im Konstruktor, sondern per definition.
Update
Es stellt sich heraus, mein Testfall war fehlerhaft. Als die MiddlewareTest wurde basierend auf SimpleTest unit-test-Fall, SimpleTest hatte tatsächlich - was ich nicht erkennen -, indem es die autorun instanziiert die Basisklasse selbst das war nie Gegenaktionen. Behoben, indem die Übergeordnete Klasse Abstrakt.
Lessons learned: Aufbau einer sauberen test-Fall und tatsächlich führen Sie es vor und schrie um Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht sicher, wie das passiert auf dem server. Ich hatte, um Annahmen über die
MiddlewareTest
Klasse, die Klasse ändern, Namen und fügte einige einfache debugging-Zeilen, aber mit diesem code:Bekomme ich diese Ergebnisse:
Wie Sie sehen können, werden die Werte drehen sich übergeben zu werden, so wie Sie definiert sind in der instanziierten Klasse, genau wie erwartet.
Können Sie geben einige details auf Ihrer MiddlewareTest Klasse, die vielleicht etwas Licht auf, warum Sie vielleicht erleben dieses Verhalten?
Welche php-version verwendest du?