在两个类之间共享方法的最佳方法是什么,我可以从中自由地调用方法,而不使用继承?

时间:2014-01-09 23:35:32

标签: php oop

假设 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魔法来实现这一点,但在我走这条路之前,我想确保我没有错过其他更标准的方法。如果魔术方法确实是实现这一目标的最佳方法,那么我很有兴趣以干净的方式使用它。

1 个答案:

答案 0 :(得分:0)

这可以是decorator patternproxy

虽然在你的例子中我认为它是__call方法,在最简单的例子中可以是:

public function __call($method, $arguments) {
  return call_user_func_array(array($this->innerObject, $method), $arguments);
}