1

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

特別な変数を使用する場合、から親メソッドを呼び出すと、これはもちろん、スコープ内であっても$thisclassになります。BAB

メソッド全体をコピーできることはわかっていますがcreate()(Traits が役立つのでしょうか?)、すべての「コンストラクター」(すべてのcreate*メソッド) もコピーする必要があり、これはばかげています。

メソッドがコンテキストで呼び出されたとしても、どうすれば$bbになるのを助けることができますか?BA

4

1 に答える 1