セクション 8 - アクセス方法_PHP チュートリアル

WBOY
リリース: 2016-07-21 16:01:02
オリジナル
825 人が閲覧しました

/*
+---------------------------------------------- -- ----------------------------------+
| = この記事は Haohappy<> ; = 章のクラスとオブジェクトのメモ
| = 不要なトラブルを避けるため、転載はご遠慮ください
| PHP 愛好家は一緒に進歩しましょう
| = PHP5 Research Center: http://blog.csdn.net/haohappy2004
+---------------------- -------------------------------------------------- -- ---+
*/
セクション 8 -- アクセスメソッド
PHP5 のアクセスメソッドでは、クラスメンバーへのアクセスを制限できます。これは PHP5 の新機能ですが、多くのオブジェクト指向言語にすでに存在しています。アクセス メソッドを理解することによってのみ、信頼性の高いオブジェクト指向アプリケーションを開発し、再利用可能なオブジェクト指向クラス ライブラリを構築できます。
C++ や Java と同様、PHP にはクラスのアクセス メソッドとして、public、private、および protected の 3 つのアクセス メソッドがあります。 member は、アクセス メソッドを指定しない場合、デフォルトのアクセス メソッドは public です。また、静的メンバーのアクセス メソッドを指定し、そのアクセス メソッドを static キーワードの前に置くこともできます (public static など)。
パブリック メンバーには制限なくアクセスできます。クラス外のコードは、スクリプト内のどこからでもパブリック メソッドを呼び出すことができます。これにより、オブジェクトはすべてパブリックであるように感じられます。適切に構造化された配列と同様に、プライベート (プライベート) メンバーはクラス内でのみ表示されます。プライベート プロパティの値を、それが配置されているクラス メソッドの外で変更したり読み取ったりすることはできません。同様に、同じクラス内のメソッドのみを呼び出すことができます。プライベート メソッドは、親クラスのプライベート メンバーにアクセスできません。
例 6.8、equals メソッドは 2 つのウィジェットを比較します。同じクラスのオブジェクトですが、この例では各オブジェクト インスタンスが一意の ID を持っています。equals メソッドが別のオブジェクトにどのようにアクセスするかに注意してください。Java と C の両方でこのようなことが可能です。
リスト 6.8 プライベートメンバー



コードをコピーします

コードは次のとおりです:
class ウィジェット
{
private $name;  
プライベート $価格;  
プライベート $id;  
public function __construct($name, $price)
{
$this->name = $name;  
$this->price = floatval($price);  
$this->id = uniqid();  
}
//2つのウィジェットが同じであるかどうかを確認します 检查两个ウィジェットが同じかどうかを確認します
public equals($widget)
{
return(($this->name == $widget->name)AND
( $this->価格 == $widget->価格));  
}
}
$w1 = 新しい ウィジェット('Cog', 5.00);  
$w2 = 新しい ウィジェット('Cog', 5.00);  
$w3 = 新しい ウィジェット('ギア', 7.00);  
//TRUE
if($w1->equals($w2))
{
print("w1 と w2 は 同じ
n");  
}
//FALSE
if($w1->equals($w3))
{
print("w1 と w3 は 同じ
n");  
}
//FALSE, == 比較に ID が含まれます
if($w1 == $w2) //不等, ID が異なるため
{
print("w1 と w2 は 同じです
;n");  
}
?>  
オブジェクト指向プログラミングに慣れていない人は、プライベート メンバーの目的が何なのか疑問に思うかもしれません。この章の冒頭で説明した、プライベート メンバーはデータのカプセル化に役立ちます。クラス内に隠されており、クラス外のコードからはアクセスできません。また、データ構造外のコードが内部プロパティに直接アクセスできない場合でも、暗黙的な依存関係は存在しません。解決策は、パブリック メソッドのペアを使用することです。1 つは get (プロパティの値を取得)、もう 1 つは set (プロパティの値を設定) です。コンストラクターはプロパティの初期値も受け入れます。これにより、限定された適切なインターフェイスを介してメンバー間の通信が行われるようになり、メソッドに渡される値を変更する機会も提供されます。例 6.8 では、コンストラクターが価格を強制的に浮動小数点数にする方法 (floadval()) に注目してください。
保護された (保護された) メンバーは、同じクラス内のすべてのメソッドと継承されたクラス内のすべてのメソッドからアクセスできます。パブリック属性は、サブクラスが依存することを許可するため、カプセル化の精神に違反します。保護されたメソッドは作成されません。この問題については、保護されたメソッドを使用するサブクラスは、その親クラスの構造を知る必要があります。例 6.9 は、Thing の Widget サブクラスを含めて、getName という名前の保護されたメソッドを含むようになりました。ウィジェットが保護されたメソッドを呼び出そうとすると、エラーが発生します。$w1->getName() はエラーを生成します。ただし、Thing のサブクラスでは、getName メソッドはこの保護されたメソッドを呼び出すことができます。 Widget::getName メソッドは保護されています。実際の状況では、保護されたメソッドを使用するには、オブジェクトの内部構造を理解する必要があります。



コードをコピーします
コードは次のとおりです。
class ウィジェット
{
private $name;  
プライベート $価格;  
プライベート $id;  
public function __construct($name, $price)
{
$this->name = $name;  
$this->price = floatval($price);  
$this->id = uniqid();  
}
//2つのウィジェットが同じかどうかを確認します
public equals($widget)
{
return(($this->name == $ウィジェット->名前)AND
($this->価格== $ウィジェット->価格));  
}
protected function getName()
{
return($this->name);  
}
}
class Thing extends Widget
{
private $color;  
public function setColor($color)
{
$this->color = $color;  
}
public function getColor()
{
return($this->color);  
}
public function getName()
{
return(parent::getName());  
}
}
$w1 = 新しい ウィジェット('Cog', 5.00);  
$w2 = 新しい Thing('Cog', 5.00);  
$w2->setColor('Yellow');  
//TRUE (まだ!) 结果仍然真
if($w1->equals($w2))
{
print("w1 and w2 are the same
n");  
}
//print Cog 出 Cog
print($w2->getName());  
?> 

サブクラスは、親クラスのメソッドをオーバーライドすることでメソッドへのアクセス方法を変更できます。ただし、パブリック クラスのメンバーをオーバーライドする場合、そのメンバーはサブクラス内でパブリックのままでなければなりません。 protected または public になるプライベート メンバーは、現在のクラスでのみ表示されます。親クラスのプライベート メンバーと同じ名前のメンバーを宣言すると、単に現在のクラスに別のメンバーが作成されます。したがって、技術的には、プライベートをオーバーライドすることはできません。
Final キーワードは、メンバー メソッドへのアクセスを制限する別の方法です。 サブクラスは、親クラスで Final としてマークされたメソッドをオーバーライドできません。
Final キーワードは、属性には使用できません。

www.bkjia.com本当http://www.bkjia.com/PHPjc/316944.html技術記事 /* +---------------------------------------------- --- ---------------------------------+ |=この記事は、CorePHP プログラミングの ClassesandObjects の章からの Haohappy のメモです。 |=|= メイン + 個人的な翻訳...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート