私は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でミックスインのような - - 彼らはより多くの他のクラスに含まれるように意図されている
ソフトウェアアーキテクチャ/デザインに関連するものの例としてWordPressを使用しないでください。 ;) – lxg
私はこの比較を意図的に使いました。 ;-)私は、WordPressコードがひどく設計されたコードの例であることを知っています。そして、グローバルなスコープで変数を使うよりも、メソッドを使ってクラス/特性を作る方が良いと思います。 – TomaszGasior