💡 この記事でわかること
- クラスとは何か、インスタンスとの関係
- class での定義、
__constructと$thisの役割 - プロパティ(データ)とメソッド(処理)、
publicとprivateの違い - 関数だけで書く場合との違い、クラスを使うメリット
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 なメソッド経由で操作させる、という使い分けをします。
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)と、それを操作するメソッド(add・count)が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 と書くと、Cat は Animal の __construct やメソッドをそのまま使えます。必要な部分だけ、同じ名前のメソッドを定義して上書きできます。親のコンストラクタを呼びたいときは parent::__construct(...) と書きます。継承は深くしすぎると複雑になるため、最初は「共通処理をまとめる程度」に留めるのがおすすめです。
8. クラス用語 早見表
| 用語 | 意味 |
|---|---|
| クラス | 設計図(class で定義) |
| インスタンス | 設計図から作った実体(new Dog("ポチ", 3)) |
| __construct | new したときに自動で呼ばれる初期化メソッド |
| $this | そのインスタンス自身 |
| プロパティ | インスタンスが持つデータ($this->name) |
| メソッド | クラスの中で定義された関数 |
| public / private | どこからでも使える / クラスの中だけ |
| 継承(extends) | 他のクラスの機能を引き継ぐこと |
9. まとめ
- クラスはデータと処理をまとめた設計図。
newでインスタンスを作って使う __constructで初期化、$thisでそのインスタンス自身を指す- プロパティ=インスタンスのデータ、メソッド=クラス内の関数。アクセスは
-> - 外から触られたくないデータは
privateにして、メソッド経由で操作する - 小さな処理は関数で十分。状態を持つ「モノ」を表したいときにクラス。
extendsで継承できる
👉 まずは __construct でプロパティを2〜3個持ち、メソッドを1つ作る、という小さなクラスから書いてみましょう。WordPressのプラグインやフレームワークのコードを読むときにも、この基本が土台になります。