假设我有这个课程
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()也不允许,因为我只想使用method_a和method_c与其他方法进行method_b链接
答案 0 :(得分:4)
我可以想到两种可能性。第一个是不从$this
重新发送method_b()
。这会阻止链接method_c()
- 但其他一切也是如此,所以这似乎不是你想要的。
第二个有点难看,但可能会按预期工作:向您的类中添加另一个私有变量$last_method
,并在每个被调用的方法中设置它(到方法名称或某种id)。这样,当调用method_c()
时,您可以检查最后一个被调用的方法是否为method_b()
- 如果是,则抛出异常(或者在这种情况下您想做的任何事情)。请注意,此解决方案还可以防止在没有链接的情况下在同一对象上连续调用method_b()
和method_c()
- 因此这可能不是您正在寻找的100%。
答案 1 :(得分:1)
您可以使用状态模式并在Test中为每个可能的状态引入State对象。当有人调用方法B时,您将测试状态内部更改为StateB类,当有人调用方法C时,您可以引发异常。