具体的なコンセプトを話すと、それが何なのかよく分からない気がします
。クラスのメンバープロパティとメンバーメソッドの前に、public protected private などの修飾子を追加します
目的:アクセス制御を実現するために、オブジェクトの内部詳細を可能な限り隠します。[アクセスを拒否しません] (外部世界に対する障壁を形成し、外部世界と通信するための限られた外部インターフェースのみを保持します。) )
2. カプセル化の原則:
オブジェクトの外部部分は、オブジェクトの内部データ (メンバー属性とメンバーメソッド) に自由にアクセスできないため、外部エラーの「相互感染」を効果的に回避し、ソフトウェアエラーを局所的に特定でき、エラーを大幅に削減できます。エラーの検出の必要性とトラブルシューティングの難しさ。
3. 修飾子 public protected private
public: パブリック、デフォルト protected: protected private: private
4. アクセス範囲
対応するプロパティとメソッドにアクセスできるかどうか
公開 | 保護されています | プライベート | |
クラス外 | √ | × | × |
クラスの内部 | √ | √ | √ |
①クラス外からアクセスできるのはパブリックプロパティとメソッドのみです。
②他のプロパティやメソッドには、クラス内でpublicメソッドを宣言することで間接的にアクセスできます
③クラス内のパブリック、プライベート、保護されたプロパティとメソッドにアクセスできます。
④プライベートおよび保護されたプロパティとメソッドにはクラス内でアクセスできません。
メンバー メソッドにアクセス制御文字がない場合、デフォルトでパブリックになり、どこからでもアクセスできます (パブリック メソッドは、オブジェクトの内部詳細に間接的にアクセスするためのオブジェクト外部のアクセス インターフェイスとして使用できます)。
これらのマジックメソッドを紹介すると、まず、コンストラクターメソッド__construct()はキーワードで変更されておらず、パブリックメソッドです(コンストラクターをプライベート権限に設定しないでください)ユーザーはインスタンス内でコンストラクターメソッドを使用できますオブジェクトを変換したら、プライベートプロパティに初期値を代入します。
ただし、オブジェクトをインスタンス化し、プログラムの実行中にプライベート プロパティに値を代入したい場合は 2 つの方法があります 。
(1). クラス内にパブリック メソッドを設定して、割り当てインターフェイスと値インターフェイスを提供します
リーリー
結果は: 藤
リーリー結果は: Baoqiang
(2)マジックメソッド__set()、__get()、__isset()、__unset()
上記のように毎回 public メソッドを設定する必要がある場合、php5.1.0 以降のバージョンでは、すべての非 public 属性の取得とコピー操作を完了するために __set() と __get() が事前に定義されています。 .
__set($propertyName,$propertyValue)
には、 属性名 と 属性値 の 2 つのパラメーターがあります。非パブリック属性に値を割り当てると、このメソッドが自動的に呼び出されます ( は、クラス内で __set() を宣言する必要があることを意味します) (コードの後半に追加)
__get($propertyName) は、非公開プロパティの値を取得するときにこのメソッドを自動的に呼び出します。
非パブリック属性が存在するかどうかを検出します __isset() と、オブジェクトの非パブリック属性 __unset() を削除します ユーザーがこれら 2 つのメソッドを積極的に呼び出すのを防ぐには、private キーワードを使用してそれらをオブジェクト内にカプセル化します。
__isset($propertyName) は、非パブリック属性が存在するかどうかを検出します (これは補助的な検出関数であり、検出機能はありません)。 __unset($propertyName) は、object_ の非公開プロパティを削除します。このメソッドは、unset() 関数が外部から呼び出された場合にのみ自動的に呼び出されます。