変数や関数を定義する際に指定するアクセス権について調べてみました。
アクセス権は public 、private、protected の三種類存在します。
三種類のアクセス権の特徴と確認コード
public はクラス外から呼び出しを許可しており、private はクラスからのみ呼び出し可能となっています。
protected はクラスと継承したクラスから呼び出しができるようになっています。
<?php
class ParentClass {
public $public = 'public';
private $private = 'private';
protected $protected = 'protected';
public function publicCalling() {
echo $this->public . '\n';
echo $this->private . '\n';
echo $this->protected . '\n';
}
private function privateCalling() {
echo $this->public . '\n';
echo $this->private . '\n';
echo $this->protected . '\n';
}
protected function protectedCalling() {
echo $this->public . '\n';
echo $this->private . '\n';
echo $this->protected . '\n';
}
}
$parent = new ParentClass();
// 実行可能
$parent->publicCalling();
// 以下2つでエラーが発生
// $parent->privateCalling();
// $parent->protectedCalling();
class ChildClass extends ParentClass {
public function publicCalling() {
parent::publicCalling();
}
private function privateCalling() {
// privateなのでエラー
parent::privateCalling();
}
protected function protectedCalling() {
parent::protectedCalling();
}
}
おわりに
私は基本的に案件への途中参加が多いので、
アクセス権を付与する際は、同じような機能をもつ変数、関数を見て判断しています。
その上で、付与する対象が汎用性があるものなのか、それとも局所的な使い方をするものなのかを考えて、
public または private を付与することがほとんどでした。
protected に関しては、プロジェクトを一から作成する際にお世話になりそうです。
そういった機会がないので、今のうちに学習し、使いこなせるようになりたいです。