PHPで複数のコンストラクターのようなものを使用できるようにする、この回答で提示されたアイデアが気に入りました。私が持っているコードは次のようになります:
class A {
protected function __construct(){
// made protected to disallow calling with $aa = new A()
// in fact, does nothing
};
static public function create(){
$instance = new self();
//... some important code
return $instance;
}
static public function createFromYetAnotherClass(YetAnotherClass $xx){
// ...
}
class B extends A {};
$aa = A::create();
$bb = B::create();
B
同じコードであるため、同じ「疑似コンストラクター」を使用する派生クラスを作成したいと思います。create()
ただし、この場合、メソッドをコーディングしない場合、self
定数は classA
であるため、変数$aa
と変数は両方とも class ですが、私$bb
は classA
になりたいと考え$bb
ていますB
。
特別な変数を使用する場合、から親メソッドを呼び出すと、これはもちろん、スコープ内であっても$this
classになります。B
A
B
メソッド全体をコピーできることはわかっていますがcreate()
(Traits が役立つのでしょうか?)、すべての「コンストラクター」(すべてのcreate*
メソッド) もコピーする必要があり、これはばかげています。
メソッドがコンテキストで呼び出されたとしても、どうすれば$bb
になるのを助けることができますか?B
A