ホームページ > バックエンド開発 > PHPチュートリアル > クラス設計 (静的クラスと無料静的クラスの選択方法)

クラス設計 (静的クラスと無料静的クラスの選択方法)

WBOY
リリース: 2016-09-19 09:16:26
オリジナル
1091 人が閲覧しました

一部のフレームワーク設計では
DB::get('mall')->where('aaa');
なぜこれができないのか
DB::get('mall')::where('ああ');

もう 1 つの問題は、ファクトリまたは静的コンテナーを通じて生成されるオブジェクトは一般に静的であることです。
たとえば、ログ クラスの場合、静的設計と非静的設計の両方を見てきました。ちょっと不安

新しいようなナンセンスなものを使用せずに、どのツールタイプが静的であるのに最適であるかは教えないでください。

返信内容:

一部のフレームワーク設計では
DB::get('mall')->where('aaa');
なぜこれができないのか
DB::get('mall')::where('ああ');

もう 1 つの問題は、ファクトリまたは静的コンテナーを通じて生成されるオブジェクトは一般に静的であることです。
たとえば、ログ クラスの場合、静的設計と非静的設計の両方を見てきました。ちょっと不安

新しいようなナンセンスなものを使用せずに、どのツールタイプが静的であるのに最適であるかは教えないでください。

まず、静的と非静的の違いを理解する必要があります。

静的クラスはインスタンス化せずに使用できます。この場合、パフォーマンスがわずかに向上します。

静的属性はすべてのインスタンスで共有されます。インスタンスの数に関係なく、静的属性は 1 つだけです。

もちろん、非静的クラスがシングルトンとして使用される場合、実際には大きな違いはありません。

では、静的か非静的かを選択するにはどうすればよいでしょうか?オブジェクト指向に対する人それぞれの理解に応じて、使用方法は異なります。

たとえば、ログ。システム内にログ オブジェクトが 1 つだけある場合は、メソッド呼び出し、パフォーマンス、データ ストレージの点で静的クラスの方が便利であるため、静的クラスを使用することが間違いなく最適です。現時点では、このログ オブジェクトをエンティティ オブジェクトまたは抽象オブジェクトとして使用できます。

しかし、ログがユーザー行動ログ、データベース操作ログ、サーバーステータスログなどに細分化される場合、ログはすでに抽象オブジェクトであり、より適切に使用するにはエンティティが必要です。このとき静的でないものを使用し、newを使い分けた方が良いでしょう。これらはすべて同じログ オブジェクトに属していますが、データとメソッドが異なるためです。関数。

したがって、私の個人的な理解は、クラスが他のモジュールに依存せず、このモジュールの機能を完了するために拡張する必要がない完全な機能モジュールである場合、それを静的に記述するのが最善であるということです。
クラスが単なる抽象オブジェクトであり、他のモジュールにも依存している場合、拡張する必要がある場合、継承する必要がある場合など、静的でないクラスを使用することをお勧めします

  • 実際、これはオブジェクト指向の設計原則に準拠していません。実際、どのように記述しても問題ありません。

  • 第二に、静的クラスはリサイクルするのが簡単ではありません。PHP などのスクリプト言語では、通常、スクリプトが占有しているメモリは理論上、スクリプトの実行時に終了します。静的クラスの使用 メモリの再利用の問題はありません。しかし、Java などの場合、静的クラスの急増はメモリの回復に役立ちません
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート