2

このクラスがあるとしましょう

class Test
{

   method_a(){ return $this;}

   method_b(){ return $this;}

   method_c(){ return $this;}
}

$obj = new Test();
$obj->method_a()->method_b();
$obj->method_a()->method_c();
$obj->method_b()->method_c(); //i want to disallow this

method_c() を使用した method_b() チェーンを禁止するにはどうすればよいですか

編集:

$obj->method_b() を呼び出し、続いて $obj->method_c() を呼び出すことも許可されません。

4

2 に答える 2

4

私が考えることができる2つの可能性があります。$this1 つ目はから戻らないことですmethod_b()。それは連鎖を防ぎますmethod_c()が、他のすべてもそうであるため、これはあなたが探しているものではないようです.

2 つ目は見苦しいですが、意図したとおりに動作する可能性があり$last_methodます。クラスに別のプライベート変数を追加し、呼び出されたすべてのメソッドに (メソッド名または何らかの ID に) 設定します。そうすれば、を呼び出すときにmethod_c()、最後に呼び出されたメソッドがだったかどうかを確認できmethod_b()ます。method_b()このソリューションは、チェーンなしで同じオブジェクトを呼び出して連続することも防止することに注意してくださいmethod_c()。したがって、これは 100% 探しているものではない可能性があります。

于 2012-04-15T07:44:52.053 に答える
1

State パターンを使用して、Test で可能な状態ごとに State オブジェクトを導入できます。誰かがメソッド B を呼び出すと、内部で Test の状態を StateB クラスに変更し、誰かがメソッド C を呼び出すと、例外を発生させることができます。

http://source Making.com/design_patterns/stateを参照してください。

于 2012-04-15T08:18:40.860 に答える