/* +---------------------------------------------- --- ---------------------------------+ | = この記事は Haohappy によって読まれています> = 章のクラスand Objects Notes | = 翻訳 + 個人的な経験 | = 不要なトラブルを避けるため、転載はご遠慮ください。 = 批判や修正は歓迎です。PHP 愛好家と一緒に進歩していきたいと思っています。 --- --------------------------------------------------- --- --------------------+ */ セクション 8 - アクセスメソッド PHP5 のアクセスメソッドにより、クラスメンバーへのアクセスを制限できます。これは PHP5 の新機能です。しかし、アクセス メソッドを使用すると、信頼性の高いオブジェクト指向アプリケーションを開発し、C++ や Java と同様に、再利用可能なオブジェクト指向クラス ライブラリを構築できます。PHP には、パブリック、プライベート、プロテクトという 3 つのアクセス メソッドがあります。クラス メンバーのアクセス メソッドは、そのいずれかになります。アクセス メソッドを指定しない場合、静的メンバーのアクセス メソッドを static キーワードの前に指定することもできます。 (public static など) パブリック メンバーには制限なくアクセスできます。このバージョンでは、クラス外のすべてのコードでパブリック メソッドを呼び出すことができます。すべてのメソッドとプロパティはパブリックであるため、オブジェクトはきちんと構造化された配列のように見えます。プライベート メンバーは、それが配置されているクラス メソッドの外でのみ表示されます。また、その値を読み取ることもできません。同様に、同じクラス内のメソッドのみがプライベート メソッドを呼び出すことができます。継承されたサブクラスは、クラスのメンバーとクラスのインスタンスの両方がプライベート メンバーにアクセスできることに注意してください。例 6.8、equals メソッドを参照してください。 == 演算子は同じクラスの 2 つのオブジェクトを比較しますが、この例では各オブジェクト インスタンスが一意の ID を持っています。equals メソッドが別の Widget インスタンスのプライベート プロパティにアクセスする方法のみに注目してください。リスト 6.8 プライベート メンバー name = $name; $this ->id = uniqid(); } // 2 つのウィジェットが同じかどうかを確認します。 public functionquals($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) { print("w1 と w2 は同じ
n"); } //FALSE if($w1->equals($w3)) { print("w1 と w3 は同じです
n"); } //FALSE、== 比較に ID が含まれます if($ w1 == $w2) //ID が異なるため等しくない { print("w1 と w2 は同じ
n") } ?> オブジェクト指向プログラミングに詳しくない場合は、次のことを知っておくとよいでしょう。プライベート メンバーを使用する目的 この章の冒頭で説明した、カプセル化と結合の概念を思い出してください。プライベート メンバーは、クラスの外部のコードからアクセスすることなく、クラス内に隠すことができます。また、データ構造の外部のコードが内部プロパティに直接アクセスできない場合でも、ほとんどのプライベート プロパティを外部コードで共有することが解決策となります。 a public メソッドの場合、1 つは get (プロパティの値を取得)、もう 1 つは set (プロパティの値を設定) であり、これにより、狭い範囲でのメンバー間の通信が可能になります。これを行うための明確に定義されたインターフェイスにより、メソッドに渡される値を変更する機会も提供されます。例 6.8 では、コンストラクターが価格を強制的に浮動小数点数にする方法 (floadval()) を同じように使用できることに注意してください。 class クラスのすべてのメソッドおよび継承されたクラスのすべてのメソッドからアクセスできます。パブリック プロパティでは、特定のプロパティに依存するサブクラスを作成できるため、カプセル化の精神に違反します。A を使用するサブクラス。保護されたメソッドは、その親クラスの構造を知る必要があります。例 6.9 は例 6.8 から改良されており、Widget のサブクラスである Thing が含まれていることに注意してください。保護されたメソッドはエラーを取得します: $w1->getName() はエラーを生成しました。ただし、サブクラス Thing の getName メソッドは、この保護されたメソッドを呼び出すことができます。もちろん、この例は、Widget::getName メソッドが保護されていることを証明するのに役立ちます。実際の状況では、保護されたメソッドを使用するには、オブジェクトの内部構造を理解する必要があります。 $this->price = floatval($price); (); } // 2 つのウィジェットが同じかどうかを確認します public functionquals($widget) { return(($this->name == $widget->name)AND ($this->price == $widget- > Price)); } protected function getName() { return($this->name); } } クラス Thing extends Widget { public function setColor($color) { $this->color = $color; function getColor() { return($this->color); } public function getName() { return(parent::getName()) } } $w1 = 新しいウィジェット(Cog, 5.00); Cog, 5.00); $w2->setColor(Yellow); //TRUE (それでも!) 結果は true if($w1->equals($w2)) { print("w1 と w2 は同じですn "); } //print Cog 出力 Cog print($w2->getName()); ?> サブクラスは、親クラスのメソッドをオーバーライドすることで、メソッドのアクセス方法を変更できます。ただし、いくつかの制限があります。パブリック クラスのメンバーは、そのサブクラス内でもパブリックのままにする必要があります。保護されたメンバーをオーバーライドする場合、プライベート メンバーは、親クラスでのみ表示されるようにすることもできます。同じ名前を指定すると、現在のクラスに元のメンバーとは異なるメンバーが作成されるだけです。したがって、Final キーワードを使用してメンバー メソッドへのアクセスを制限することはできません。 //haohappy 注: PHP5 のオブジェクト指向モデルはまだ十分ではありません。たとえば、Java のように、データ、メソッド、さらにはクラスにも使用できません。
http://www.bkjia.com/PHPjc/532158.html
www.bkjia.com本当http://www.bkjia.com/PHPjc/532158.html技術記事 /* +---------------------------------------------- --- ---------------------------------+ = この記事は Haohappy によって読まれています> =章のクラスとオブジェクト = 翻訳 + 個人的な経験...