アクセス方法。 最も人気のある状況

この記事は主に初心者の開発者、または手続き型プログラミングからOOPに切り替え始めたばかりの人を対象としています。したがって、経験の浅い専門家を運転しないでください:)



プロパティとメソッドへのアクセス権は、一見すると、プライベート、保護、パブリックの3つの単語だけです。 しかし、それらの背後には何がありますか? これは開発においてどのような利点を提供しますか? そして、それらを正しく使用する方法は? ここでは、プログラミングの他のすべての側面と同様に、練習なしでは理解できません...



OOPの3つの主要な概念の1つは継承です(他の2つはカプセル化とポリモーフィズムです)。 一般に、アクセス権が実現されたのは彼女のためでした。 継承の基本的な考え方:子オブジェクトは、親を継承(拡張)するときに、すべての親メソッドとプロパティを引き継ぎ、独自のオブジェクトを取得することもできます。 このベースを理解すると、以下のすべてにアクセスできます...



Private-存在するクラスでのみ使用可能なメソッドまたはプロパティを宣言します。 つまり、オブジェクトまたは子クラスからプライベートメソッドとプロパティにアクセスすることはできません。



Protected-保護されたメソッドまたはプロパティを宣言します。 つまり、クラスを実装するオブジェクトからはアクセスできないが、子クラスで使用できるもの。



パブリック -パブリック。 publicによって宣言されたクラスおよびメソッドは、クラス自体内、子クラス内、およびクラスを実装するオブジェクト内の両方でアクセスできます。



継承では、アクセス方法はより忠実なものにしか変更できないことにすぐに注意します。 つまり、次の順序で、ただしその逆ではありません:プライベート→保護→パブリック



また、メソッドはfinalにすることができますつまり、下位クラスでオーバーライドできないメソッドです。



一般に、すべてのアクセス方法はコードを自己文書化するためにのみ使用され、論理コンポーネントを運ばないため、それらなしでの生活は困難ですが、不可能ではありません。



練習する



これらのアクセス方法では不十分な場合があります。 つまり、たとえば、あるプロパティを読み取るためにオブジェクトからアクセスしたいが、それに書き込むことはできない場合があります。 最も簡単な解決策は、パブリックプロパティを宣言してコメント/ *読み取り専用* /を追加することですが、実行中に非標準値に侵入することで誤ってコメントを忘れ、プログラムの動作を台無しにすることができます。 次に、ゲッター(ゲッター\)を使用します。 ゲッターは、オブジェクトから非パブリックプロパティを読み取る例外的な機能を実装するクラスメソッドにすぎません。 以下に例を示します。

class A {

private $a = 7;// ,



public function getA() { //

return $this->a; //

}

}



$obj = new A();

echo $obj->getA();// $a









セッター(setter \ 's)も同様に動作します。変数の値を設定する必要があるが、直接読み取ることはできません。たとえば、使用する前に変換する必要があるためです。 セッターメソッドの例:

//...

public funtion setA($value) { //

$this->a = $value; // $a ,

}

//...









メソッドへのアクセスを実装するためのもう1つのオプションは、メソッドをどこでも読み取り専用にする必要がある場合、\ "pseudo-properties \"を導入することです。



class A {

public function getValue() {

static $value;



if (empty($value)) {

$value = //... -

}



return $value;

}

}







上記の例では、クラスAには擬似プロパティ$値があります。 擬似-メソッドを介して排他的に実装され、読み取り専用にアクセスできるため。 パターン\ "lazy initialization \"を使用してプロパティの作成を最後の瞬間まで延期し、同時に\ "キャッシュ\"することにも気づくでしょう。 これを適用できる場所については、PHPのOOPに関する次のトピックで詳しく説明しています。



プライベートメソッドを使用してすべてのプロパティを非表示にし、必要に応じてセッターまたはゲッターを作成することをお勧めしますが、プロパティのセッターとゲッターがあり、追加のデータ処理ロジックがない場合、それらを削除するのは簡単ではないことに注意する必要があります、プロパティを公開しますか? :)



All Articles