假设 yourMethod 是您在班级中提供的方法。
假设 packageMethod 是我的包提供的方法(注意:我正在使用Laravel和包的外观,但它可能与我的问题无关)。
你最好如何做到这一点:
// Controller
$obj = EasyPackage::make(new YourClass);
$obj->easyMethod(); // Calls package method (probably does some stuff using the injected instance of YourClass and some of your methods)
$obj->yourMethod(); // You can still call your methods directly too! But How???
//$obj->yourInstance->yourMethod(); I don't want you to have to do this.
基本上这些类是共享方法,而不需要我显式引用包含Your实例的属性,正如您在本示例的底部看到的那样。相反,EasyPackage应检查该方法是否公开且可用,首先在其自己的方法集中,如果没有,则再次检查YourClass。 如何让这个工作?是否有适当的设计模式可以研究这个?
我知道我可以使用包中的__call
魔法来实现这一点,但在我走这条路之前,我想确保我没有错过其他更标准的方法。如果魔术方法确实是实现这一目标的最佳方法,那么我很有兴趣以干净的方式使用它。
答案 0 :(得分:0)
这可以是decorator pattern或proxy。
虽然在你的例子中我认为它是__call方法,在最简单的例子中可以是:
public function __call($method, $arguments) {
return call_user_func_array(array($this->innerObject, $method), $arguments);
}