【发布时间】:2013-10-30 13:14:40
【问题描述】:
我正在为micro-framework I've been working on 构建一个插件接口,并试图解决一个概念性问题。我决定制作的第一个“插件”是 Stripe 集成,本质上是采用 Stripe 的 PHP 库并将其包装为插件。我有一种工厂模式,它允许检索插件实例,例如:
$stripe = Iceberg::getPlugin('Stripe');
如果一个类可以被实例化就足够简单了,但是对于 Stripe 库,所有的类都是静态的。在他们的示例中,他们建议对主 Stripe 文件执行 include(),然后您可以像这样使用它:
Stripe::setApiKey('xyz');
我的断开连接是如何使我的getPlugin() 方法与只公开静态接口的类一起工作。我显然无法实例化该类并期望它正常工作,但同时,我希望此方法能够工作,而不管实例或静态对象如何。
我的一个想法是在我的 Stripe 插件类中实现 __call() 方法,然后尝试将这些调用静态传递给 Stripe 库,例如:
在控制器中使用插件
$stripe = Iceberg::getPlugin('Stripe');
$stripe->setApiKey('xyz');
在插件中
public function __call( $name, $arguments )
{
Stripe::$name($arguments);
}
我不确定这样的方法是否可行,即使可行,如果这是最好的方法。
TLDR:我如何创建一个可以与对象上下文和静态上下文中的类交互的对象?
【问题讨论】:
标签: php oop instance static-methods