2017-01-17 7 views
0

私はOOPの原則を知っていて、クラス、メソッド、プロパティなどの意味を理解しています。 。たとえば、私はWordPressのコンセプトに基づいて自分のプロジェクトのフックメカニズムを作成しました。この方法で形質を使用することはできますか?

WordPressには、グローバルスコープ内に$ wp_hooks変数があり、add_action()、do_action()、add_filter()、apply_filter()関数があります。各関数は$ wp_hooks varを "global"キーワードでインポートします。

私のプロジェクトでは、静的メソッドとプロパティのみを持つクラスを作成しました。簡単な例:

<?php 
class Hooks 
{ 
    static private $_actions = []; 
    static private $_filters = []; 

    static public function addAction() { /* code... */ } 
    static public function addFilter() { /* code... */ } 
    static public function removeAction() { /* code... */ } 
    static public function removeFilter() { /* code... */ } 
    static public function runAction() { /* code... */ } 
    static public function applyFilter() { /* code... */ } 
} 

私はクラスがこのように使用されるべきではないことを知っています。シングルトンパターンがありますが、私はそれが気に入らず、私のプロジェクトでそれを使用したくありません。

最近、偶然、静的メソッドのみのクラスと同じ特性を使用できることがわかりました。 PHPでは、パブリックな静的メソッドを特性で呼び出すことは可能です。

クラスと特性は同じ構文と同様の機能を持っています(どちらも関数と変数を含むことができます)。しかし、特性はコンテナのみであり、特別な意味を持ちません。クラスが特別な意味を持っている場合、アイデアクラスが実際のオブジェクトグループの要約に含まれます(PersonクラスやProductクラスなど)。

これは私の質問です。本当のクラスではなく、コンテナだけのクラスで「クラス」を「特性」に変更すると間違いを犯すと思いますか?

(。私の英語のミスのため申し訳ありません;>)Rubyでミックスインのような - - 彼らはより多くの他のクラスに含まれるように意図されている

+2

ソフトウェアアーキテクチャ/デザインに関連するものの例としてWordPressを使用しないでください。 ;) – lxg

+0

私はこの比較を意図的に使いました。 ;-)私は、WordPressコードがひどく設計されたコードの例であることを知っています。そして、グローバルなスコープで変数を使うよりも、メソッドを使ってクラス/特性を作る方が良いと思います。 – TomaszGasior

答えて

2

あなたは、このようトレイトを使用することになっていません。しかし、のような自体はアドレスすることができ、そのfunctionesが参照するので、PHPでの形質を行うミックスインは、モジュールおよびモジュールとして実装されているルビー、中には対処することができ、その機能は、参照:

trait Test { 
    public function foo() { 
     return 4; 
    } 
} 

Test::foo(); // returns => 4 

それは「より良いスタイルかもしれ"関数コレクションのための特性を使用するために、それは間違いなく空のクラスの静的メソッドのコレクションよりもきれいに見えますが、どちらもRight Thing(tm)です。

+1

はい、誰かが*「それは唯一の方法」*と主張しているところですが、いつも別の方法があります! – Nytrix

+0

ご返信ありがとうございました。プログラマが良い解決策を見つけることができない状況がいくつかあります。 ;) – TomaszGasior

関連する問題