無料プログラミング教室 Pスクール PHP スタートブック 第5章: PHPのオブジェクト指向プログラミング(OOP)

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング(OOP)は、プログラムを「オブジェクト」という単位に分割して管理するプログラミングの手法です。PHPにおいても、OOPを使用することで、再利用性が高く、保守しやすいコードを構築することが可能です。本章では、クラスとオブジェクトの基礎から始まり、継承、抽象クラス、インターフェース、多態性、さらに名前空間とオートロードまでを解説します。


5.1 クラスとオブジェクトの基本

クラスの定義とオブジェクト生成

PHPにおけるクラスは、データとそれを操作するメソッドをまとめた設計図のようなもので、オブジェクトはこのクラスから生成された具体的な「インスタンス」を指します。まずはクラスの基本的な定義方法から確認していきましょう。

PHPのクラスは class キーワードを用いて定義します。クラスの内部には、データを保持する「プロパティ」と、データを操作する「メソッド」を定義します。以下は、シンプルなクラスの例です。

class Car
{
public $color;
public $model;

public function __construct($color, $model)
{
$this->color = $color;
$this->model = $model;
}

public function drive()
{
echo "The {$this->color} {$this->model} is driving.";
}
}

この Car クラスには、colormodel の2つのプロパティが定義されており、__construct メソッドで初期化されます。また、drive というメソッドは、この車が「走行中」であることを示すメッセージを出力します。

オブジェクトを生成するには、new キーワードを使います。

$car = new Car("red", "Toyota");
$car->drive();

上記のコードでは、Car クラスから $car というオブジェクトを生成し、drive メソッドを呼び出しています。これにより、次のような出力が表示されます。

The red Toyota is driving.

プロパティとメソッド

プロパティはクラス内部で保持されるデータのことで、クラス内で変数として定義されます。PHPでは、プロパティには publicprotectedprivate のアクセス修飾子を設定することができ、アクセスの範囲を制御できます。

  • public:どこからでもアクセス可能
  • protected:クラス自身と継承クラスからのみアクセス可能
  • private:そのクラスからのみアクセス可能

メソッドはクラスの内部で定義される関数で、オブジェクトに関連した動作を実行します。以下の例では、プロパティにアクセスするためのメソッドを追加しています。

class Car
{
private $color;
private $model;

public function __construct($color, $model)
{
$this->color = $color;
$this->model = $model;
}

public function getColor()
{
return $this->color;
}

public function getModel()
{
return $this->model;
}
}

$car = new Car("blue", "Honda");
echo "The car model is: " . $car->getModel();

5.2 継承と多態性

オブジェクト指向プログラミングでは、「継承」という機能を用いることで、既存のクラスを基に新しいクラスを作成できます。PHPで継承を行う場合は extends キーワードを使用します。

クラスの継承とその応用

継承を利用すると、既存のクラスの機能を再利用しながら、新たな機能を追加できます。たとえば、Car クラスを継承して特定の種類の車、例えばスポーツカーを定義する場合を見てみましょう。

class Car
{
protected $color;
protected $model;

public function __construct($color, $model)
{
$this->color = $color;
$this->model = $model;
}

public function drive()
{
echo "The {$this->color} {$this->model} is driving.";
}
}

class SportsCar extends Car
{
private $maxSpeed;

public function __construct($color, $model, $maxSpeed)
{
parent::__construct($color, $model);
$this->maxSpeed = $maxSpeed;
}

public function showSpeed()
{
echo "This sports car can go up to {$this->maxSpeed} km/h.";
}
}

$sportsCar = new SportsCar("red", "Ferrari", 300);
$sportsCar->drive();
$sportsCar->showSpeed();

ここでは、SportsCar クラスが Car クラスを継承し、maxSpeed という新しいプロパティと showSpeed メソッドを追加しています。parent::__construct() を使用して、親クラスで定義されたコンストラクタを呼び出し、基本的な初期化を行っています。

抽象クラス、インターフェース、多態性の活用

PHPでは、クラスの構造をより柔軟にするために、抽象クラスとインターフェースが使用できます。

  1. 抽象クラス 抽象クラスは、具体的なインスタンスを生成できないクラスで、子クラスが実装する必要がある抽象メソッドを含めることができます。
    abstract class Vehicle
    {
    abstract public function drive();
    }

    class Car extends Vehicle
    {
    public function drive()
    {
    echo "The car is driving.";
    }
    }

    $car = new Car();
    $car->drive();
  2. インターフェース インターフェースは、複数のクラスに対して共通のメソッド実装を要求するための契約を定義します。インターフェースを実装するクラスは、インターフェースで定義されたすべてのメソッドを具体的に実装する必要があります。
    interface Drivable
    {
    public function drive();
    }

    class Car implements Drivable
    {
    public function drive()
    {
    echo "The car is driving.";
    }
    }

    $car = new Car();
    $car->drive();
  3. 多態性 多態性とは、同じメソッド名で異なる動作を実行できるようにする特性です。これは、親クラスやインターフェースに依存したコードを書くことで、異なるクラスのオブジェクトに対して同様の操作を行えることを意味します。
    class Motorcycle extends Vehicle
    {
    public function drive()
    {
    echo "The motorcycle is driving.";
    }
    }

    function startDrive(Drivable $vehicle)
    {
    $vehicle->drive();
    }

    $car = new Car();
    $motorcycle = new Motorcycle();

    startDrive($car);
    startDrive($motorcycle);

5.3 名前空間とオートロード

大規模なプロジェクトでは、クラスの名前が他の部分と競合しないようにするために「名前空間」が必要になります。PHPでは、namespace キーワードを使用して名前空間を定義します。

名前空間の使い方と管理

namespace Vehicles;

class Car
{
public function drive()
{
echo "The car is driving.";
}
}

$car = new \Vehicles\Car();
$car->drive();

オートロードでファイルを自動的に読み込む方法

オートロードとは、必要なクラスが呼び出された際に自動的にファイルを読み込む仕組みです。PHPには spl_autoload_register() 関数が用意されており、これを使用してクラスのオートロードを設定できます。

spl_autoload_register(function ($class) {
require_once __DIR__ . '/' . str_replace('\\', '/', $class) . '.php';
});

$car = new \Vehicles\Car();
$car->drive();


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

Related Post

第4章: PHPの関数第4章: PHPの関数

プログラミングにおいて、関数は特定のタスクを実行するためのコードのブロックです。関数を使うことで、コードの再利用性が向上し、プログラムをより整理された形で記述できます。PHPでは多くの組み込み関数を提供していますが、独自 […]