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_b() 与 method_c() 链接

编辑:

调用 $obj->method_b() 并跟随 $obj->method_c() 也不允许,因为我只希望 method_b 与 method_a 和 method_c 与其他方法链接

4

2 回答 2

4

我能想到两种可能性。首先是不$thismethod_b(). 这将阻止链接method_c()- 但其他所有内容也是如此,所以这似乎不是你想要的。

第二个有点难看,但可能会按预期工作:$last_method向您的类添加另一个私有变量并在每个调用的方法中设置它(到方法名称或某种 id)。这样,在调用时method_c(),您可以检查最后调用的方法是否是method_b()- 如果是,则抛出异常(或在这种情况下您想做的任何事情)。请注意,此解决方案还可以防止在没有链接的情况下调用method_b()method_c()连续调用同一对象-因此这可能不是您正在寻找的 100%。

于 2012-04-15T07:44:52.053 回答
1

您可以使用状态模式并为测试中的每个可能状态引入状态对象。当有人调用方法 B 时,您在内部将 Test 的状态更改为 StateB 类,当有人调用方法 C 时,您可以引发异常。

http://sourcemaking.com/design_patterns/state

于 2012-04-15T08:18:40.860 回答