PHPのクラスとは?定義・インスタンス・メソッドの使い方を解説

PR PHP

PHPのクラスとは?定義・インスタンス・メソッドの使い方を解説

💡 この記事でわかること

  • クラスとは何か、インスタンスとの関係
  • class での定義、__construct$this の役割
  • プロパティ(データ)とメソッド(処理)、publicprivate の違い
  • 関数だけで書く場合との違い、クラスを使うメリット
  • extends による継承の基本

1. クラスとは?

クラスとは、
👉 データ(プロパティ)と処理(メソッド)をひとまとめにした「設計図」です。

💡 設計図であるクラスから、実際に使う「実体」を作ります。この実体をインスタンスと呼びます。たとえば「犬」という設計図(クラス)から、「ポチ」「ハチ」といった個々の犬(インスタンス)を作る、というイメージです。

それぞれのインスタンスは、自分専用のデータ(名前・年齢など)を持ちつつ、共通の処理(鳴く、など)を使えます。WordPressのテーマ・プラグインや、Laravelなどのフレームワークでは、このクラスが当たり前に登場します。


2. クラスを定義する(class・__construct・$this)

<?php
class Dog {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;   // プロパティ(このインスタンスの名前)
        $this->age = $age;
    }

    public function bark() {
        echo "{$this->name}がワンと鳴きました";
    }
}
  • class クラス名 { } で定義する(クラス名は大文字始まりが慣習)
  • public $name; のように、使うプロパティを先に宣言する
  • __construct() は、new でインスタンスを作るときに自動で呼ばれる初期化用メソッド
  • $this は「そのインスタンス自身」を指す。プロパティやメソッドは $this->名前 で扱う

💡 「引数を受け取って同名のプロパティに入れる」という定番は、PHP 8.0以降なら次のように短く書けます(コンストラクタプロモーション)。最初は上の長い形で理解しておけば十分です。

<?php
class Dog {
    public function __construct(
        public string $name,
        public int $age,
    ) {}
}

3. インスタンスを作って使う(new)

<?php
$pochi = new Dog("ポチ", 3);   // インスタンスを作成(__construct が呼ばれる)
$hachi = new Dog("ハチ", 5);

echo $pochi->name;   // ポチ(プロパティの参照)
echo $hachi->age;    // 5

$pochi->bark();   // ポチがワンと鳴きました
$hachi->bark();   // ハチがワンと鳴きました

👉 new クラス名(引数) でインスタンスを作れます$pochi$hachi は同じ Dog クラスから作られていますが、それぞれ別の名前・年齢を持っています。プロパティやメソッドへのアクセスには ->(アロー)を使います。


4. プロパティとメソッド(public・private)

  • プロパティ:インスタンスが持つデータ。$this->count のように $this-> を付けて扱う
  • メソッド:クラスの中で定義された関数。インスタンスのプロパティを読んだり書き換えたりできる
<?php
class Counter {
    private $count = 0;   // クラスの外からは直接触れない

    public function increment() {
        $this->count++;
    }

    public function getCount() {
        return $this->count;
    }
}

$c = new Counter();
$c->increment();
$c->increment();
echo $c->getCount();   // 2
// echo $c->count;    // エラー: private なので外からは読めない

👉 public はどこからでもアクセスでき、private はそのクラスの中でしか使えません。外から勝手に書き換えられたくないデータは private にして、public なメソッド経由で操作させる、という使い分けをします。

👉 PHPの関数(引数・戻り値)についての記事はこちら


5. 使用例:買い物カゴ

「データ」と「そのデータを操作する処理」がセットになっている例として、買い物カゴをクラスにしてみます。

<?php
class Cart {
    private $items = [];   // 商品を入れる配列

    public function add($item) {
        $this->items[] = $item;
    }

    public function count() {
        return count($this->items);
    }

    public function getItems() {
        return $this->items;
    }
}

$cart = new Cart();
$cart->add("りんご");
$cart->add("パン");

print_r($cart->getItems());   // Array ( [0] => りんご [1] => パン )
echo $cart->count();          // 2

💡 カゴの中身(items)と、それを操作するメソッド(addcount)が1つのクラスにまとまっています。使う側は $cart->add(...) と書くだけで、内部で配列をどう管理しているかを気にせず済みます。

👉 クラスの中でよく使う、配列・連想配列についての記事はこちら


6. 関数だけの場合との違い

関数クラス
まとめるもの処理だけデータ(プロパティ)と処理(メソッド)をセット
状態(データ)の保持基本は持たないインスタンスごとに持てる
向いている場面入力→出力が明確な処理「モノ」を表現し、状態を持たせたいとき

👉 小さな処理は、まず関数で十分です。「関連するデータと処理がいくつも増えてきて、まとめて扱いたい」と感じたときにクラスを検討しましょう。


7. 継承(extends)

継承を使うと、あるクラスの機能を引き継いだ新しいクラスを作れます。共通部分を1回書けば済むようになります。

<?php
class Animal {
    public function __construct(public string $name) {}

    public function speak() {
        echo "{$this->name}が鳴きました";
    }
}

class Cat extends Animal {   // Animal を継承する
    public function speak() {  // 同じ名前のメソッドで上書き(オーバーライド)
        echo "{$this->name}がニャーと鳴きました";
    }
}

$animal = new Animal("どうぶつ");
$animal->speak();   // どうぶつが鳴きました

$cat = new Cat("タマ");
$cat->speak();      // タマがニャーと鳴きました

💡 class Cat extends Animal と書くと、CatAnimal__construct やメソッドをそのまま使えます。必要な部分だけ、同じ名前のメソッドを定義して上書きできます。親のコンストラクタを呼びたいときは parent::__construct(...) と書きます。継承は深くしすぎると複雑になるため、最初は「共通処理をまとめる程度」に留めるのがおすすめです。


8. クラス用語 早見表

用語意味
クラス設計図(class で定義)
インスタンス設計図から作った実体(new Dog("ポチ", 3))
__constructnew したときに自動で呼ばれる初期化メソッド
$thisそのインスタンス自身
プロパティインスタンスが持つデータ($this->name)
メソッドクラスの中で定義された関数
public / privateどこからでも使える / クラスの中だけ
継承(extends)他のクラスの機能を引き継ぐこと

9. まとめ

  • クラスはデータと処理をまとめた設計図newインスタンスを作って使う
  • __construct で初期化、$this でそのインスタンス自身を指す
  • プロパティ=インスタンスのデータ、メソッド=クラス内の関数。アクセスは ->
  • 外から触られたくないデータは private にして、メソッド経由で操作する
  • 小さな処理は関数で十分。状態を持つ「モノ」を表したいときにクラス。extends で継承できる

👉 まずは __construct でプロパティを2〜3個持ち、メソッドを1つ作る、という小さなクラスから書いてみましょう。WordPressのプラグインやフレームワークのコードを読むときにも、この基本が土台になります。

-PHP
-, , ,