セクション 8 - アクセス メソッド
PHP5 のアクセス メソッドでは、クラス メンバーへのアクセスを制限できます。これは PHP5 の新機能ですが、アクセス メソッドを使用すると、信頼できるオブジェクトを開発できます。
C++ や Java と同様、PHP にはクラス メンバーのアクセス メソッドとして、public、private、protected のいずれかを使用できます。アクセス メソッドを指定しないでください。デフォルトのアクセス メソッドは public です。また、静的メンバーのアクセス メソッドを指定して、そのアクセス メソッドを static キーワードの前に置くこともできます (例: public static)。クラス外のコードはパブリック プロパティを読み書きできます。PHP の以前のバージョンでは、すべてのメソッドとプロパティがパブリックであったため、オブジェクトを適切に構造化された配列と考えることができました。
プライベート (プライベート) メンバーは、クラス内でのみ表示されます。プライベート プロパティの値を、それが配置されているクラス メソッドの外で変更または読み取ることはできません。同様に、同じクラス メソッド内でのみ、値を変更または読み取ることができます。プライベート プロパティ。クラス内のメソッドはプライベート メソッドを呼び出すことができます。継承されたサブクラスは親クラスのプライベート メンバーにアクセスできません。
クラス内のすべてのメンバーがプライベート メンバーにアクセスできることに注意してください。例 6.8 を参照してください。 == 演算子は 2 つのウィジェットを比較しますが、この場合、各オブジェクト インスタンスは名前と価格のみを比較します。equals メソッドがウィジェット インスタンスの別のプライベート プロパティにアクセスする方法に注意してください。 Java と C の両方でそのような操作が可能です。カプセル化と結合については、この章の冒頭で説明しました。プライベート メンバーは、データ構造の外部のコードからアクセスすることなく、データをカプセル化するのに役立ちます。内部プロパティにアクセスすると、暗黙的な依存関係はなくなります
もちろん、ほとんどのプライベート プロパティは引き続き外部コードで共有できます。その解決策は、1 つのパブリック メソッドを使用することです。1 つは get (プロパティの値を取得する) です。コンストラクターはプロパティの初期値も受け入れます。これにより、限定された明確なインターフェイスを通じてメンバー間の通信が可能になります。例 6.8 で、コンストラクターが価格を強制的に浮動小数点数にする方法 (floadval()) に注目してください。
保護された (保護された) メンバーは、同じクラス内のすべてのメソッドで使用でき、すべてのメソッドにアクセスできます。継承されたクラスでは、パブリック プロパティは、特定のプロパティに依存するサブクラスを作成できるため、カプセル化の精神に違反します。 プロテクト メソッド ウィジェットのサブクラスは、その親クラスの構造を知る必要があります。
例 6.9 は例 6.8 から改良されており、ウィジェットのサブクラス Thing が含まれています。ウィジェットのインスタンスが保護されたメソッドを呼び出そうとするとエラーが発生することに注意してください。 ;getName() はエラーを生成しましたが、この例は、Widget::getName メソッドが保護されていることを証明するために使用されます。メソッドはオブジェクトの内部構造を理解することに依存しています
リスト 6.9 保護されたメンバー
<?php class Widget { private $name; private $price; private $id; public function __construct($name, $price) { $this->name = $name; $this->price = floatval($price); $this->id = uniqid(); } //checks if two widgets are the same 检查两个widget是否相同 public function equals($widget) { return(($this->name == $widget->name)AND ($this->price == $widget->price)); } } $w1 = new Widget(Cog, 5.00); $w2 = new Widget(Cog, 5.00); $w3 = new Widget(Gear, 7.00); //TRUE if($w1->equals($w2)) { print("w1 and w2 are the same<br> "); } //FALSE if($w1->equals($w3)) { print("w1 and w3 are the same<br> "); } //FALSE, == includes id in comparison if($w1 == $w2) //不等,因为ID不同 { print("w1 and w2 are the same<br> "); } ?>
http://www.bkjia.com/PHPjc/532555.html