オブジェクトとデータ構造


オブジェクトとデータ構造

1. ゲッターとセッターを使用する オブジェクトのカプセル化を使用する

2. オブジェクトにはプライベートまたは保護されたメンバー変数を使用します。

1.ゲッターとセッターを使用する

PHP では、オブジェクト プロパティへの変更を制御するメソッドとして

public protectedprivate を使用できます。

  1. オブジェクトのプロパティを取得する以外の操作を実行する場合、コード内の各プロパティ アクセス メソッドを検索して変更する必要はありません。

  2. setに対応する属性メソッドがある場合、パラメータ検証を追加するのが簡単

  3. パッケージ内の表記

  4. setget を使用すると、ロギングとエラー制御を簡単に追加できます。

  5. 現在のクラスを継承するときに、デフォルトのメソッド関数をオーバーライドできます。

  6. オブジェクトのプロパティをリモート サーバーから取得する場合、

    get*set* は遅延読み込みを使用するのが簡単です。

さらに、このアプローチは OOP 開発におけるオープニングとクロージングの原則にも準拠しています。

###悪い:###

リーリー ###良い:### リーリー

2. オブジェクトにはプライベートまたは保護されたメンバー変数を使用します

パブリック メソッドとプロパティを変更することは、外部コードが簡単に依存する可能性があり、制御できないため、非常に危険です。これを変更すると、このクラスのすべてのユーザーに影響します。パブリック メソッドとプロパティの変更は、一部の外部コードが簡単に依存する可能性があり、どのコードがそれらに依存するかを制御できないため、変更が最も危険です。クラス内の変更は、クラスのすべてのユーザーにとって危険です。

  • protected への変更は、サブクラスで利用できるため、public への変更とほぼ同じくらい危険です。これらの唯一の違いは、呼び出し可能な場所が異なり、それらへの変更は、このクラスを統合するすべての場所に影響します。 protected 修飾子は、どの子クラスのスコープでも使用できるため、public と同様に危険です。これは事実上、public と protected の違いはアクセス メカニズムのみであり、カプセル化の保証は同じであることを意味します。クラス内の変更は、すべての子孫クラスにとって危険です。 。

  • private への変更は、コードのこの部分が現在のクラスにのみ影響することを保証します。private 修飾子は、単一クラスの境界内でのみコードを変更するのは危険であることを保証します (変更しても安全であり、ジェンガ効果はありません)。

したがって、クラス内のコードにアクセスできるかどうかを制御する必要がある場合は public/protected を使用し、それ以外の場合は private を使用します。

Fabien Potencier によるこのブログ投稿を読むことができます。

###悪い:### リーリー ###良い:###

リーリー