静的または非静的?
この質問をしたことがありますか?
静的メソッド内から非静的パラメーター/メソッドにアクセスすることはできません (少なくとも依存性注入を使用しないと)。
ただし、非静的メソッド ( with self::
)から静的プロパティとメソッドにアクセスできます。
プロパティ
特定のプロパティ値がクラス ブループリントに割り当てられているか、それともインスタンス (クラスから作成されたオブジェクト) に割り当てられているか? 値がクラス インスタンス (クラス オブジェクト) に厳密でない場合は、それを静的プロパティとして宣言できます。
private static $objectCreatedCount; // this property is assign to class blueprint
private $objectId; // this property is assign explicitly to class instance
メソッド
メソッドを静的にするか非静的にするかを決定するときは、簡単な質問を自問する必要があります。このメソッドを使用する必要があります$this
か? 存在する場合は、static として宣言しないでください。
また、$this キーワードが必要ないからといって、自動的に何かを静的にする必要があるというわけではありません (ただし、逆は真です: $this が必要な場合は非静的にします)。
このメソッドを 1 つの個別のオブジェクトで呼び出していますか、それともクラス全体で呼び出していますか? どちらも特定のユースケースに適しているためにどちらを使用すればよいかわからない場合は、常に非静的を使用してください。これにより、将来の柔軟性が向上します。
特定のケースが非常に明確になった場合は、常にクラスを非静的として設計し、強制的に静的にすることをお勧めします。
パラメータを静的として宣言しようとすることもできます...静的メソッドからアクセスできるようにするためですが、通常、それはやりたいことではありません。したがって、静的メソッドから本当にアクセスする必要がある場合は、間違っているため$this
、クラスアーキテクチャを再考/再設計する必要があることを意味します。