PHPにおけるオブジェクト指向プログラミング入門

さて、これからPHPにおけるOOPの学習を始めましょう。まずは実例を見てから、それをPHPに移してみます。

例として自動車を取り上げます。自動車には車輪、色、ボディタイプ、エンジン排気量などのプロパティがあります。さらに、運転者は自動車にコマンドを出すことができます:走る、止まる、右に曲がる、左に曲がるなどです。

つまり、共通の特性(すべてに車輪があり、すべてにコマンドを出せる)を持つ自動車のクラスが存在すると言えます。

路上に停まっている具体的な一台の自動車は、このクラスの代表、言い換えればこのクラスのオブジェクトです。このクラスのすべてのオブジェクトはプロパティ(車輪の数、色、ボディタイプ)とメソッド(走る、止まる、右に曲がる、左に曲がる)を持っています。

言い換えれば、クラス自体は設計図であり、工場ではこの設計図に基づいて自動車が製造されます。オブジェクトは、その設計図に基づいて作られた車そのものです。

PHPでは、クラスはキーワードclassを使って作成され、その後にクラス名が続きます。では、Carクラスを作成してみましょう:

php<?php
  class Car
  {
    // ここにコード、つまりPHPによる自動車の設計図を記述
  }
?>

では、この設計図に、この設計図に基づいて作られるすべての自動車が色と燃料量のプロパティを持つことを定義しましょう。

そのために、クラス内部にプロパティ$colorとプロパティ$fuelを記述します:

php<?php
  class Car
  {
    // プロパティ(実質的にはクラスの変数)を定義:
    public $color; // 自動車の色
    public $fuel; // 燃料の量
  }
?>

次に、このクラスのメソッドを作成しましょう。 PHPでは、メソッドは通常の関数と同様にキーワードfunctionで宣言され、その前にキーワードpublicが記述されます。

先述したように、私たちの自動車は走ることができ、曲がることができ、止まることができます。クラス内に対応するメソッドを作成しましょう:

php<?php
  class Car
  {
    public $color; // 自動車の色
    public $fuel;  // 燃料の量
    
    // 走るコマンド:
    public function go()
    {
      // 何らかのPHPコード
    }
    
    // 曲がるコマンド:
    public function turn()
    {
      // 何らかのPHPコード
    }
    
    // 止まるコマンド:
    public function stop()
    {
      // 何らかのPHPコード
    }
  }
?>

私たちは自動車の設計図を作成しました。 次に、工場に行き、このクラスのオブジェクト(つまり具体的な自動車)を作成する必要があります。

PHPではこれはキーワードnewを使って行われ、その後ろにクラス名を記述します:

php<?php
  new Car;
?>

しかし、単にクラスのオブジェクトを作成するだけでは何も起こりません(例えば、配列を宣言してもどこにも保存しないようなものです)。このオブジェクトを格納するための変数が必要です。

この変数を$myCarと呼ぶことにして、作成したオブジェクトを代入しましょう:

php<?php
  $myCar = new Car;
?>

自動車を作成した後、そのプロパティにアクセスできます。プロパティへのアクセスは矢印->を介して行われます。オブジェクトのプロパティを設定しましょう:

php<?php
  $myCar = new Car; // 工場に自動車を作るよう命令
  
  // オブジェクトのプロパティを設定:
  $myCar->color = 'red'; // 赤色に塗装
  $myCar->fuel = 50; // 燃料を補給
?>

これで、私たちの自動車は作成され、塗装され、燃料が補給されました。これで、この自動車のメソッドを通じてコマンドを出すことができます。

メソッドへのアクセスも矢印を介して行われますが、プロパティとは異なり、メソッド名の後には丸括弧を記述します。オブジェクトにコマンドを出してみましょう:

php<?php
  $myCar->go();
  $myCar->turn();
  $myCar->stop();
?>