2016-05-10 6 views
0

私はこの問題があります:私はより多くのメソッドを連結したい、私はそのメソッドが必要です(最初)、別のメソッドがある場合は、$ thisを返し、そうでなければオブジェクトを返します。OOP:メソッド連結とチェック "キュー"

例:最初の例で

$some->create('Foo')->with('Bar'); 
$some->create('Foo'); 

$some->create()は連結を可能にするために、$これを返すことがあります。 2番目の方法では、create()メソッドはオブジェクトを返す必要があります。

メソッドの順序を変更せずに方法がありますか?今、私はいつも$を返して、別の関数(例:$some->create('Foo')->getInfo();)でそのオブジェクトを "返す"ことができます。

ありがとう。

+0

は、それは** **メソッドのchainigと呼ばれています。 –

+0

これは役に立ちません。問題は別です。私はメソッド連鎖を行う方法を知っていますが、最初のメソッドの後に別のメソッドがあれば、別の値を返す方法(および可能であれば)はわかりません。 – Grork

+2

コードは左から右へと評価されるので、 'create()'メソッドは、 –

答えて

1

あなたのメソッドcreate()は、何かを返すかもしれませんが、呼び出し元のメソッドが何をしているかについての情報はありません。 可能なオプションは、オプションの引数を渡すか、またはラッパーメソッドを使用することです。

class Test { 
    public function create($what, $methodChaining = false) 
    { 
     // do stuff, create $object 
     if ($methodChaining) { 
      return $this; 
     } 
     return $object; 
    } 

    public function createAndChain($what) 
    { 
     $this->create($what); 
     return $this; 
    } 
} 

$object->create('Foo', true)->with('Bar'); // execute with() on the first $object 
$object->createAndChain('Foo')->with('Bar'); // same as above 
$object->create('Foo')->with('Bar'); // execute with() from the new Foo-object 

あなたが最初に一つのオブジェクトまたは1つを作成した新規のチェーンのメソッドを実行したい場合はさらに、コードを知ることができない...