構築中に機能を提供することになっている(抽象)親クラスがあります。子クラスは、コンストラクターで使用されるプロパティをオーバーライドできます。
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 で可能ですか、それとも必要な機能を提供するために毎回子コンストラクターをオーバーライドする必要がありますか?
注: php で子クラスと親クラスの間でプロパティが共有されているのを見ましたが、子プロパティはコンストラクターではなく定義によって割り当てられるため、これは異なります。
アップデート
私のテストケースに欠陥があることが判明しました。MiddlewareTest は SimpleTest ユニット テスト ケースに基づいていたので、SimpleTest は実際には (私が認識していなかったことに)、自動実行によって意図されていない Parent クラス自体をインスタンス化していました。Parent クラスを抽象化することで修正されました。
得られた教訓: クリーンなテスト ケースを作成し、助けを求める前に実際に実行します。