私が取り組んできたマイクロフレームワークへのプラグインインターフェイスを構築しており、概念的な問題を解決しようとしています。私が作成することに決めた最初の「プラグイン」は、基本的に Stripe 用の PHP ライブラリを取得し、それをプラグインとしてラップする、Stripe 統合です。次のようなプラグイン インスタンスの取得を可能にする一種のファクトリ パターンがあります。
$stripe = Iceberg::getPlugin('Stripe');
クラスをインスタンス化できる場合は十分に単純ですが、Stripe ライブラリの場合、すべてのクラスはstaticです。彼らの例でinclude()
は、メインの Stripe ファイルを実行することを推奨しており、次のように使用できます。
Stripe::setApiKey('xyz');
私の切断は、getPlugin()
静的インターフェイスのみを公開するクラスでメソッドを機能させる方法です。クラスをインスタンス化して正しく動作することを期待できないことは明らかですが、同時に、インスタンスまたは静的オブジェクトに関係なく、このメソッドが動作することを望んでいます。
私が持っていた 1 つのアイデアは__call()
、Stripe プラグイン クラスにメソッドを実装し、それらの呼び出しを Stripe ライブラリに静的に渡すことです。
プラグインを使用してコントローラーで
$stripe = Iceberg::getPlugin('Stripe');
$stripe->setApiKey('xyz');
プラグインで
public function __call( $name, $arguments )
{
Stripe::$name($arguments);
}
そのようなものがうまくいくかどうかはわかりませんし、うまくいくとしても、それが最善の方法であるかどうかはわかりません.
TLDR:オブジェクト コンテキストと静的コンテキストの両方でクラスとやり取りできるオブジェクトを作成するにはどうすればよいですか?