一部のフレームワーク設計では
DB::get('mall')->where('aaa');
なぜこれができないのか
DB::get('mall')::where('ああ');
もう 1 つの問題は、ファクトリまたは静的コンテナーを通じて生成されるオブジェクトは一般に静的であることです。
たとえば、ログ クラスの場合、静的設計と非静的設計の両方を見てきました。ちょっと不安
新しいようなナンセンスなものを使用せずに、どのツールタイプが静的であるのに最適であるかは教えないでください。
一部のフレームワーク設計では
DB::get('mall')->where('aaa');
なぜこれができないのか
DB::get('mall')::where('ああ');
もう 1 つの問題は、ファクトリまたは静的コンテナーを通じて生成されるオブジェクトは一般に静的であることです。
たとえば、ログ クラスの場合、静的設計と非静的設計の両方を見てきました。ちょっと不安
新しいようなナンセンスなものを使用せずに、どのツールタイプが静的であるのに最適であるかは教えないでください。
まず、静的と非静的の違いを理解する必要があります。
静的クラスはインスタンス化せずに使用できます。この場合、パフォーマンスがわずかに向上します。
静的属性はすべてのインスタンスで共有されます。インスタンスの数に関係なく、静的属性は 1 つだけです。
もちろん、非静的クラスがシングルトンとして使用される場合、実際には大きな違いはありません。
では、静的か非静的かを選択するにはどうすればよいでしょうか?オブジェクト指向に対する人それぞれの理解に応じて、使用方法は異なります。
たとえば、ログ。システム内にログ オブジェクトが 1 つだけある場合は、メソッド呼び出し、パフォーマンス、データ ストレージの点で静的クラスの方が便利であるため、静的クラスを使用することが間違いなく最適です。現時点では、このログ オブジェクトをエンティティ オブジェクトまたは抽象オブジェクトとして使用できます。
しかし、ログがユーザー行動ログ、データベース操作ログ、サーバーステータスログなどに細分化される場合、ログはすでに抽象オブジェクトであり、より適切に使用するにはエンティティが必要です。このとき静的でないものを使用し、newを使い分けた方が良いでしょう。これらはすべて同じログ オブジェクトに属していますが、データとメソッドが異なるためです。関数。
したがって、私の個人的な理解は、クラスが他のモジュールに依存せず、このモジュールの機能を完了するために拡張する必要がない完全な機能モジュールである場合、それを静的に記述するのが最善であるということです。
クラスが単なる抽象オブジェクトであり、他のモジュールにも依存している場合、拡張する必要がある場合、継承する必要がある場合など、静的でないクラスを使用することをお勧めします
実際、これはオブジェクト指向の設計原則に準拠していません。実際、どのように記述しても問題ありません。