0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHP】オブジェクト指向の近道 - アクセス権とカプセル化

Last updated at Posted at 2022-11-15

アクセス権を設定

アクセス権とは、クラス外からクラス内のプロパティやメソッドへのアクセスを制限するための設定です。アクセス修飾子を使用して、プロパティやメソッドに対するアクセス権を設定します。アクセス修飾子はpublic private protectedの3種類です。

publicprivate

publicプロパティとpublicメソッドは、どこからでもアクセスできます。privateプロパティとprivateメソッドは、クラス外からアクセスできません。同じインスタンス内であっても、privateはクラスが違うとアクセスできません。

この例では、すべてのプロパティをprivate、すべてのメソッドをpublicに設定しました。このようにすると、メソッドにはアクセスできますがプロパティにはアクセスできません。

プロパティnamepublicにすれば、メソッドgetName()は必要ないのではという疑問がでます。なぜこうするかというと、アクセス修飾子はアクセス権を設定できますが、Read onlyやWrite onlyを設定をすることはできません。そのため、プロパティをRead onlyにする時は、プロパティはprivateにしてReadだけできるメソッドをpublicにします。このようなメソッドをgetterとよびます。また、Writeだけできるメソッドをsetterとよびます。

PHP8.1以降では、プロパティにreadonlyを指定することが可能になりました。プロパティはできる限り readonlyに設定し、コンストラクタで初期化し、メソッドでプロパティを変更しないようにすることが推奨されています。

カプセル化

クラス外からのアクセスが不要なプロパティとメソッドをprivateで隠蔽して、クラスの中身を意識しなくてもよくすることをカプセル化とよびます。カプセル化のメリットは、publicでクラス外からアクセスできるメソッドのみを保証すれば、その他のプロパティやメソッドはクラス内で自由に変更できることです。原則プロパティとメソッドはprivate、必要最低限のメソッドのみをpublicとするのがセキュアな設計です。

プロパティとメソッドはprivate、必要最低限のメソッドのみをpublicとする

protected

アクセス修飾子protectedのプロパティやメソッドは、クラス外からはアクセスできませんが、子クラスからはアクセスできます。内部処理用のメソッドですが、子クラスでオーバーライドしたいような時に使います。

<?php

class Person
{
    protected $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

class Person2 extends Person
{
    private $age;

    public function __construct($name, $age)
    {
        parent::__construct($name);
        $this->age = $age;
    }

    public function getAge()
    {
        return $this->name.':'.$this->age;
    }
}

$person_a = new Person2('suzuki', 28);
$person_b = new Person2('tanaka', 26);

$person_a_age = $person_a->getAge();
var_dump($person_a_age);
実行結果
string(7) "suzuki:28"

protectedはクラスを継承した時に使う

オブジェクト指向の近道(全5記事)

  1. なぜオブジェクト指向が必要か?
  2. クラスとインスタンス
  3. 継承とトレイト
  4. アクセス権とカプセル化
  5. staticと転送コール
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?