限制其他方法的方法链接

时间:2012-04-15 07:33:54

标签: php

假设我有这个课程

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链接

2 个答案:

答案 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时,您可以引发异常。

请参阅http://sourcemaking.com/design_patterns/state