0
2

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

クラスとインスタンス

オブジェクト指向は、変数と関数をまとめて箱に入れて、ソースコードの再利用性を高める工夫です。この変数と関数をまとめる箱をクラスと呼びます。クラスに入れた変数をプロパティ、関数をメソッドと呼びます。呼び方が違うだけで、プロパティは変数、メソッドは関数です。

クラスPersonに入れることで、変数と関数を一つにまとめることができました。しかし、Personにはsuzukitanakaもあり、一つの箱だけでは不十分です。そこで、クラスをコピーして増やせるようにしました。クラスをコピーして生成するのがインスタンスです。生成したインスタンスのプロパティを変更して、suzukitanakaなどのオブジェクトを作ります。

クラスを定義

Personのクラス定義です。前半がプロパティ(変数)の定義、後半がメソッド(関数)の定義です。__construct()はコンストラクタと呼ばれる特別なメソッド(マジックメソッド)で、インスタンス生成時に自動的に実行されます。

<?php

class Person
{
プロパティ定義
    public $name;
メソッド定義
    public function __construct($name)
    {
        $this->name = $name;
    }

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

クラスはプロパティ(変数)とメソッド(関数)を定義する

インスタンスを生成

Personからインスタンスを生成しましょう。PHPの変数は、数値や文字列などのスカラー変数、複数の変数をまとめた配列、そしてオブジェクトの3つに大別できます。クラスから生成したインスタンスは、オブジェクト型の変数に代入して使用します。

変数のタイプ 使い方
数値、文字列 $a=1; $a=’suzuki’;
配列、連想配列 $a=[1, 2, 3]; $a=[‘name’ => ‘suzuki’];
オブジェクト $a = new Class();

Personのインスタンス生成と、プロパティnameを取得するソースコードです。インスタンスはnewで生成します。2つのインスタンスを生成して、$person_a $person_bに代入しました。

クラス定義
<?php

class Person
{
    public $name;

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

    public function getName()
    {
        return $this->name;
    }
}
インスタンス生成
$person_a = new Person('suzuki');
$person_b = new Person('tanaka');

オブジェクト指向は、車やリモコンなどさまざまな物にたとえて説明されることがありますが、これらの例は抽象的すぎて、初級プログラマにとって理解が難しいかもしれません。再利用性を高めるために、関連するプロパティ(変数)とメソッド(関数)をまとめる箱がクラスであり、クラスからインスタンスを生成してオブジェクト型の変数に代入して使うという考え方がオブジェクト指向の基本です。

クラスから生成したインスタンスはオブジェクト型の変数に代入して使う

プロパティとメソッド

インスタンスのプロパティとメソッドには、アロー演算子->でアクセスします。プロパティは$a->propertyで、メソッドは$a->method()でアクセスできます。生成したインスタンスのメソッドgetName()をコールしました。これでインスタンスのプロパティnameが取得できます。

メソッドをコール
$person_a_name = $person_a->getName();

var_dump($person_a_name);
実行結果
string(6) "suzuki"

コンストラクタの処理を説明します。newでインスタンスを生成した時の引数suzukiは、そのままコンストラクタの引数$nameに渡されます。$nameはメソッド(関数)内でしか利用できないローカル変数のため、他のメソッドでは利用できません。引数とプロパティの$nameは外見上は同じように見えますが、実際には異なる変数です。

$namegetNameで参照できるように、コンストラクタでプロパティに引数の値をセットしました。自インスタンスのプロパティには、疑似変数$thisでアクセスします。疑似変数$thisもオブジェクト型の変数で、自動でインスタンス自身が代入されます。疑似変数$thisはインスタンス内で自インスタンスをあらわす変数ですので、インスタンス外では使用できません。

プロパティをセット
    public $name;

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

クラス定義では疑似変数$thisで自インスタンスのプロパティやメソッドにアクセス

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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?