セクション 8 - アクセス方法 - PHP5 [8] のクラスとオブジェクト_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:20:47
オリジナル
665 人が閲覧しました

セクション 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>
"); 

   } 

?> 
ログイン後にコピー




サブクラスは親クラスのメソッドをオーバーライドすることでメソッドのアクセスを変更できます。ただし、このアプローチにはまだいくつかの制限があります。パブリック クラス メンバーをオーバーライドする場合、そのメンバーはサブクラス内でパブリックのままにする必要があります。保護されたメンバーをオーバーライドする場合、プライベート メンバーは、現在のクラスでのみ参照可能になります。親クラスは現在のクラスに別のメンバーを作成するだけなので、技術的にはプライベート メンバーをオーバーライドすることはできません。

サブクラスは、親クラスで Final としてマークされたメソッドをオーバーライドできません。 Final キーワードは属性には使用できません。


//haohappy 注: PHP5 のオブジェクト指向モデルはまだ完全ではありません。たとえば、final は Java のようなデータ、メソッド、さらにはクラスにも使用できません。






http://www.bkjia.com/PHPjc/532555.htmlwww.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/532555.html

セクション 8 - アクセス メソッド PHP5 のアクセス メソッドを使用すると、クラス メンバーへのアクセスを制限できます。これは PHP5 の新しい機能ですが、アクセス メソッドではすでに多くのオブジェクトに存在しています。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート