PHPで本格的なアプリケーションを構築するには、「オブジェクト指向プログラミング(OOP)」の理解が不可欠です。
クラス、継承、カプセル化、ポリモーフィズム、コンストラクタ・デストラクタ、インターフェースなどのOOPの概念を使うことで、再利用性が高く、保守性に優れたコードが書けるようになります。
本記事では、PHPにおけるオブジェクト指向の基本を、実際のコードを交えながら解説します。

目次
クラスとインスタンスの基本
クラスは「設計図」、インスタンスは「実体」です。PHPでは class
を使ってクラスを定義し、new
キーワードでインスタンスを生成します。
<?php
class User {
public $name; public function greet() {
return "こんにちは、{$this->name}さん!";
}
}
$user1 = new User();
$user1->name = "田中";
echo $user1->greet(); // こんにちは、田中さん!
?>
$this
は「そのインスタンス自身」を指しますpublic
は「どこからでもアクセス可能」な可視性
継承・カプセル化・ポリモーフィズム
継承(Inheritance)
親クラスの機能を子クラスに引き継ぐことができます。
<?php
class Animal {
public function speak() {
return "鳴きます";
}
}
class Dog extends Animal {
public function speak() {
return "ワンワン!";
}
}
$dog = new Dog();
echo $dog->speak(); // ワンワン!
?>
カプセル化(Encapsulation)
データをクラス内部に隠し、必要な操作のみを外部に公開します。
<?php
class BankAccount {
private $balance = 0;
public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
}
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(5000);
echo $account->getBalance(); // 5000
?>
private
はクラス内部でのみアクセス可能です。
ポリモーフィズム(Polymorphism)
異なるクラスでも、同じメソッド名で異なる動作を実現できます。
<?php
class Bird {
public function speak() {
return "チュンチュン";
}
}
class Cat {
public function speak() {
return "ニャー";
}
}
function animalSound($animal) {
echo $animal->speak();
}
animalSound(new Bird()); // チュンチュン
animalSound(new Cat()); // ニャー
?>
コンストラクタとデストラクタ
コンストラクタ
インスタンス生成時に自動で呼ばれる初期化用メソッドです。
<?php
class Product {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function show() {
return "商品名:{$this->name}";
}
}
$p = new Product("ノートPC");
echo $p->show();
?>
デストラクタ
インスタンスが破棄されるときに自動実行されます。
<?php
class Logger {
public function __destruct() {
echo "ログを出力しました。";
}
}
$log = new Logger(); // スクリプト終了時に __destruct が呼ばれる
?>
インターフェースと抽象クラス
インターフェース
「契約」として、実装すべきメソッドを定義します。
<?php
interface AnimalInterface {
public function speak();
}
class Cat implements AnimalInterface {
public function speak() {
return "ニャー";
}
}
?>
抽象クラス
abstract
なクラスは直接インスタンス化できませんが、共通のロジックを定義できます。
<?php
abstract class Shape {
abstract public function getArea();
}
class Square extends Shape {
private $side = 4;
public function getArea() {
return $this->side * $this->side;
}
}
?>
まとめ
今回は、PHPのオブジェクト指向プログラミングの基礎を一通り解説しました。
- クラスとインスタンスの基本
- 継承、カプセル化、ポリモーフィズム
- コンストラクタ / デストラクタの役割
- インターフェースと抽象クラスの違いと使い方
OOPを理解すると、コードの再利用性や保守性が劇的に向上します。