У меня есть (абстрактный) родительский класс, который должен обеспечивать функциональность во время строительства. Наследуемые классы могут переопределить свойства, используемые в конструкторе:Наследование PHP: дочерний класс переопределяет родительскую переменную/свойство для использования в конструкторе
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;
}
Проблема заключается в том, что переопределенные свойства не используются при Child::__construct()
, не переопределены пробегов ($this->createChannel
вызывается с NULL
параметрами).
Возможно ли это на PHP или мне придется каждый раз прибегать к переопределению дочерних конструкторов для обеспечения желаемой функциональности?
Примечание: я видел Properties shared between child and parents class in php, но это другое, поскольку дочерние свойства не назначаются в конструкторе, но по определению.
Update
Оказывается, мой тестовый случай был неисправен. Поскольку MiddlewareTest основывался на единичном тестовом примере SimpleTest, SimpleTest фактически - то, что я не понимал, - это автозапуск, созданный самим классом родителей, который никогда не был задуман. Исправлено с помощью абстрактного класса Parent.
Извлеченные уроки: создайте чистый тестовый чехол и на самом деле запустите его, прежде чем плакать о помощи.
Извините за отсутствие рабочего примера. Ваш намек заставил меня начать строить один, и я вижу вашу точку зрения. Попытка найти различия сейчас. – andig