it-swarm-ja.com

プラグイン開発へのOOパターンと原則の適用

私はPHP 5.3.5を使って私の最初のプラグインを書くのに忙しいです。私はC#環境から来ました、そして私は私がPHPでの良い、しっかりしたOOPテクニックのサポートのレベルに満足している以上のことを言わなければなりません。しかし、私はクラスを使ってプラグインを構築する方法について少し不確実です。私は自分のコンストラクタにフック登録を引き受けるプラグインクラスと、メールキューやメーラのようないくつかのワーカークラスを持っています。きちんとクラスに合います。私のOOプラグインのこの側面に関するガイダンスを得るために彼らが参考にできるリソースは何ですか?

このプラグインは、スケジュールどおりに大量メール送信、つまりすべての購読者へのメール送信を行うためのものです。新規追加および編集機能付きのメールテンプレート用のカスタム投稿タイプを登録します。 2つのサブメニューページ: '設定'と 'メール送信'。また、ユーザープロファイルページに「オプトアウト」オプションも追加されていますが、メインのプラグインクラスを含めるのはとてもきれいで簡単です。

1
ProfK

私は1つか2つの非クラススクリプトを持っています。主にフォーム用ですが、クラスにきちんと収まる方法がよくわからないのです。

プロジェクトを複数のクラスに分割します。ワーカークラスをインスタンス化可能なオブジェクト(通常はOOPパターン)として保持し、クラス以外のスクリプトを静的スクリプトとして独自のクラスに配置します。

このようにコードに名前を付けるには、静的なPHPクラスを使用することがよくあります。例:

class My_Object {
    public $variable = 1;

    public function __construct() {
        // Constructor
    }

    public function do_something() {
        // Misc. method for the object
        $this->variable++;
    }
}

static class Helper {
    public static function Run_Script() {
        // Function that does something and doesn't belong in a class
    }
}

これら2つのクラスの違いは、1つ(My_Object)をインスタンス化してそれをオブジェクトとして使用することです。もう1つは、基本的にはオブジェクトに属さないがグローバル名前空間にも属さない関数の名前空間ラッパーです。

あなたが自分のプラグインの中で通常のRun_Script()メソッドから始めたとしましょう…それから後になって、別の開発者が別のプラグインにRun_Script()メソッドを追加します。あなたは今名前の衝突があります。あなたのスタンドアロン関数を静的クラスの中に保持することはこれを防ぐのに役立ちます。

アクセスするにはHelper::Run_Script()を呼び出すだけです。

OOプラグインのこの側面に関するガイダンスを得るために参考にできるリソースはありますか?

基本的に、他の人がしたことを見てください。この種のパターンに従った質の高いプラグインがたくさんあります。それで、他の人がどのように問題に取り組んできたかを見て、彼らの例から学びましょう。

GitHubはコードを見るのに最適な場所です。私のプラグインのほとんどはそこにあるので、あなたはそれらをダウンロードしてインストールする必要なしに構造を見るためにコードファイルを閲覧することができます。

あなたがより多くの例のために従うべきであるGitHubの何人かのよい開発者:

2
EAMann
class Plugin{
    static public function Construct(){
        static $single_call = false; // Enable calling this just once
        if($single_call) return; // Skip double hooking
        add_filter('the_content', array(__CLASS__, 'TheContent'));
        $single_call = true; // Block future calls
    }
    /**
     * @internal
     */
    static private function ContentModifier($content){
        return $content;
    }
    // All actions/filters must be public, internal methods can stay private
    static public function TheContent($content){
        return self::ContentModifier($content);
    }
}
Plugin::Construct(); // Single Call

プラグイン用の静的クラスを作成します。アクション/フィルタは公開されている必要があります。

また、PHP 5.3以降を使用している場合は、アクションやフィルタを削除するために使い捨てが必要なClosuresを検討してください。

add_filter('the_content', function($content){
    return $content;
});

私はC++から来ましたPHPへようこそ!

0
EarnestoDev