当在不同的上下文(我系统中的 API)中使用对象方法时,我需要对对象方法进行某种访问控制。这是代码示例:
class A
{
public function doA(){}
public function doB(){}
}
class APIAClient
{
public function getA()
{
return new A();
}
}
class APIBClient {
public function getA()
{
return new A();
}
}
在 APIAClient 对象中 A 应该有方法 doA() 和 doB(),但在 APIBClient 中不应该有 doB() 方法。
现在我已经实现了 APIBClientAProxy(由 APIBCleint->getA() 返回)
class APIBClientAProxy
{
private $a = new A;
public function doA()
{
$this->a->doA()
}
}
但是可能有更好的模式来解决我的问题,而无需为每个上下文(即 API)使用额外的代理对象。我正在考虑具有特定上下文中允许方法列表的魔术 __call 方法,但是魔术调用很难做文档,文档是我应用程序中的重点(API 应该有很好的文档记录)
谢谢!