ホームページ >バックエンド開発 >PHPチュートリアル >二酸化マンガンと濃塩酸の反応式 セクション8 - アクセス方法
/*
+---------------------------------------------- -- ----------------------------------+
| = この記事は 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 ウィジェット 复制代代码如下: class ウィジェット
以上、二酸化ナトリウムと塩酸の反応手順の第 8 章を紹介しました。この内容には、二酸化ナトリウムと塩酸の反応手順に関する内容が含まれており、PHP の教則に関心のある友人の助けになることが望まれます。
{
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");
}
?>
もちろん、プライベート プロパティの大部分は外部コードによって共有される可能性があります。 解決方法は public メソッドを使用し、1 つは get(プロパティの値を取得)、もう 1 つは set(プロパティの値を設定) です。 構造関数数もプロパティの初期値を受け取ります。 これにより、狭い、十分に限定されたインターフェイスを介した交流が可能になります。 これにより、伝達方法を変更するためのミーティングも提供されます。 例6.8では、构造関数数がどのように価格をfloat数(floadval())にするかに注意してください。
Protected (保護された) は、同じ種類のすべての方法および継承された種類のすべての方法でアクセスできます。 パブリック プロパティには、子クラスが特定のプロパティに依存しているため、保護されたメソッドがこの面での責任を負いません。保護されたメソッドを使用する子クラスには、親クラスの構造が必要です。才行。
例 6.9 は例 6.8 の変更により、ウィジェットを含む子クラスの Thing を含むようになりました。 注意: Widget には、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 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());
?>
1 つの子クラスは、父クラスのメソッドを上書きすることによってメソッドの変更方法を変更する可能性がありますが、このように、いくつかの制限があります。 如果你被写了一个公開类成员、他子类中必ず公開を維持する。 保護されたものを上書きした場合は、保護されたままにすることも、公開に変更することもできます。 一踪与父类的私的成员同名成员讀单地在当前类中に建立一個与原来別成员。 したがって、技術上ではプライベートを上書きすることはできません。
最後の鍵は、方法を制限するもう 1 つの方法です。 子类は父类中标识を上書きできない最終的な方法です。 最後の文字はプロパティには使用できません。