81.アクセス修飾子ってなんだ? ~クラスのプロパティやメソッドへのアクセス権~
本日はアクセス修飾子について。
先日クラスを学習した際にチョロっと登場していたアイツについて。
では、やっていきましょう。
アクセス修飾子って何?
アクセス修飾子には
- public
- private
- protected
の3種類があります。
これが何に使われるのかと言えば、
「クラスのプロパティ、メソッドへのアクセス権の設定」といったところです。
実際のコードでは
public $name;
private $adress;
protected $test;
のような記述でプロパティやメソッドの先頭に各々付ける形で使われます。
いやいや、待って。
アクセス権?何それ?ですよね。
詳しく見ていきましょう。
アクセス権は外部と内部という区分けで付与
アクセス権はクラスの内部、外部という区分けでアクセスを制限する目的でつけるものです。
「クラスの中からはアクセスしていいけど、他のクラスからアクセスはしないでね。」
これがprivate
「誰でも好きにアクセスしていいよ。」
これがpublic
「クラスの中とその子クラスはアクセスしていいよ、それ以外はアクセスしないでね」
これがprotected
です。
protectedは継承というクラスの仕組みを使った場合に関わってくるそうです。
沼にハマりそうなので、protectedはここでは割愛します。出てきて必要になった時に学習しましょう。
publicとprivateを使ってみる
単語の意味から、そのまんまのアクセス権だなという印象ですね。
使い分けの例があるといいですね。
例えば、
クラスからインスタンスを生成する場合のコンストラクタを例に考えてみましょう。
まずはクラスの定義から。
class TestClass{
public $name;
private $price;
public function __construct($name, $price){
$this->name = $name;
$this->price= $price;
}
}
こんな感じで、name、priceプロパティにそれぞれpublic、privateのアクセス修飾子を付与。コンストラクタにも当然publicを付与(インスタンス生成するのは外部ですので)
次はインスタンス生成
$tester = new TestClass("テスト商品","900円");
testerというインスタンス名で、プロパティにはそれぞれ、nameにテスト商品、priceに900円が設定(代入)されています。
ここで、名前や価格を変更してみましょう。
$tester->name = "優良商品";
$tester->price = "1200円";
こうですね。
ここでようやくアクセス修飾子の出番です。
nameはpublicなので、そのままインスタンスのnameプロパティに優良商品という文字列が代入されます。
しかし、priceはprivateなので、外部からのアクセスができず、エラーが発生してしまうのです。
private不便じゃない?
私も思いました。
このpublicやprivateの使い分けは1人だと恩恵は少ないかもしれないです。
ですが、チームで仕事をしている場合に意図しない箇所からの変更を防いだりするなどメリットがあるようです。
時間が経過してから自分がコードを改めて見た時に、そのプロパティやメソッドを外部から利用・変更していいのかどうかを意識付ける等。
保守面での活躍がメインなようです。
今日のまとめ
- アクセス修飾子は3種類ある
- 主に使うのはprivateとpublic
- 保守性を上げるためにも明確に使い分けをすると良い
今日はアクセス修飾子についてやってきました。
クラス関連のこと学んでいると知らない横文字が多すぎて、調べ始めると沼にハマって寝れなくなりそうです。
では、また。