【PHP入門】アクセス修飾子 public protected privateの違い

所有時間1分

今回はPHPのクラス変数(プロパティ)、クラス関数(メソッド)にアクセスする際に使用する修飾子「public」「protected」「private」の違いについて紹介します。

目次

public, protected, privateの違い

  • public:クラスの外、内どちらからでもプロパティ・メソッドにアクセスできる
  • protected:同じクラス、継承したクラスのプロパティ・メソッドにだけアクセスできる
  • private:同じクラスのプロパティ・メソッドにだけアクセスできる

public > protected > privateの順でプロパティ・メソッドへのアクセス制限が強くなります。

クラスで変数を宣言する際に使用できる「var」は「public」と同じです。ただし、PHPドキュメントでは「var」は非推奨なので「public」を使用するようにしましょう。

「public」の場合

class Car
{
  public $doors = 4;

  public function drive()
  {
    echo "運転しています";
  }
}

$car = new Car();
echo $car->doors . "<br>"; //4
$car->drive(); //運転しています

publicを宣言したプロパティまたはメソッドはクラスの外、クラス内どこからでも使用できます。

「protected」の場合

class Car
{
  protected $doors = 4;

  protected function drive()
  {
    echo "運転しています";
  }
}

class SportCar extends Car
{
  public function countDoors()
  {
    echo "ドアの数:" . $this->doors . "<br>"; //protectedで宣言したプロパティを使用
  }

  public function driveSportCar()
  {
    echo "スポーツカーを";
    parent::drive() . "<br>"; //protectedで宣言したメソッドを使用
  }
}

$car = new SportCar();
$car->countDoors();
$car->driveSportCar(); //I am driving.

publicを宣言したプロパティ・メソッドはクラス内または継承したクラスで使用できます(publicも同様)。ただし、privateのようにクラスの外で使用できなくなります。

「private」の場合

{
  private $doors = 4;

  private function drive()
  {
    echo "運転しています";
  }
}

$car = new Car();
$car->doors; //エラー
$car->drive; //エラー

privateを宣言したプロパティ・メソッドはクラス内でしか使用できません。よって、クラスの外、継承したクラスで使用するとエラーが発生します。

以上です。

URLをコピーする
URLをコピーしました!
目次
閉じる