ホームページ >php教程 >php手册 >セクション 8 -- アクセス方法

セクション 8 -- アクセス方法

WBOY
WBOYオリジナル
2016-06-13 12:37:06876ブラウズ

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



コードは次のとおりです。以下のように:

クラス ウィジェット
{
private $name;  
プライベート $価格;  
プライベート $id;  
public function __construct($name, $price)
{
$this->name = $name;  
$this->price = floatval($price);  
$this->id = uniqid();  
}
//2 つのウィジェットが同じであるかどうかを確認します 检查两个ウィジェットが同じであるかどうかを確認します
public function equals($widget)
{
return(($this->名前 == $widget->name)AND
($this->price == $widget->price));  
}
}
$w1 = new Widget('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 and w2同じ
n");  
}
?>  

如果你对面向対象编程不熟徹底、你可能想知道用私用的目的是何。 パッケージと付属品の組み合わせについては、本章の内容を参照してください。 プライベート成员はデータの封入に役立ちます。 ある種の外部のコードに接触することなく、ある種の内部を通過する可能性があります。 同時に、松散布を実現するための結合にも役立ちます。 データ構造に追加された暗号が内部プロパティに直接アクセスできない場合、危険な関係は生じません。
もちろん、プライベートプロパティの大部分は外部コードによって共有される可能性があります。 解決方法は public メソッドを使用し、1 つは get(プロパティの値を取得)、もう 1 つは set(プロパティの値を設定) です。 構造関数数もプロパティの初期値を受け取ります。 これにより、狭い、十分に限定されたインターフェイスを介した交流が可能になります。 これにより、伝達方法を変更するためのミーティングも提供されます。 例6.8では、构造関数数がどのように価格をfloat数(floadval())にするかに注意してください。
保護された (保護された) ものは、同じ種類のすべての方法および継承されている種類のすべての方法でアクセスできます。 パブリック プロパティには、子クラスが特定のプロパティに依存しているため、保護されたメソッドがこの面での責任を負いません。保護されたメソッドを使用する子クラスには、親クラスの構造が必要です。才行。
例 6.9 による例 6.8 の変更により、ウィジェットの子クラスの Thing が含まれています。 注意 Widget には、1 つの呼び出し作getName の保護されたメソッドがあります。 ウィジェットのサンプル図が保護されたメソッドを使用した場合、次のような問題が発生します: $w1->getName() によって問題が発生します。 ただし、Thing クラスの getName メソッドでは、この保護されたメソッドを使用できます。当然、Widget::getName メソッドが保護されている場合、この例は完全に取得されます。 実際の場合、保護されたメソッドを使用するには、オブジェクトの内部構造の理解が必要です。
リスト 6.9 保護されたメンバー

复制代代码如下:

クラス ウィジェット
{
private $name;  
プライベート $価格;  
プライベート $id;  
public function __construct($name, $price)
{
$this->name = $name;  
$this->price = floatval($price);  
$this->id = uniqid();  
}
//2 つのウィジェットが同じであるかどうかを確認します
public function equals($widget)
{
return(($this->name == $widget->名前)AND
($this->price == $widget->price));  
}
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 = new Widget('Cog', 5.00);  
$w2 = 新しい Thing('Cog', 5.00);  
$w2->setColor('Yellow');  
//TRUE (まだ!) 结果仍然真
if($w1->equals($w2))
{
print("w1 と w2 は 同じ
n ");  
}
//print Cog 出 Cog
print($w2->getName());  
?> 


1 つの子クラスは、父クラスのメソッドを上書きすることによってメソッドの変更方法を変更する可能性があります。 如果你被写了一个公開类成员、他子类中必ず公開を維持する。 保護されたものを上書きした場合は、保護されたままにすることも、公開に変更することもできます。 一艪父类的私的成员同名成员讀单地在当前类中に建立一個与原来別成员。 したがって、技術上ではプライベートを上書きすることはできません。 
最後の关字は、方法を制限するもう 1 つの方法です。 子类は父类中标识を上書きできない最終的な方法です。 最後の文字はプロパティには使用できません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。