オブジェクト指向プログラミングの第一歩を踏み出そう
オブジェクト指向プログラミングって何?
これまでのステップでは、手続き型プログラミングという、上から順に処理を書いていく方法を学んできました。これは小規模なプログラムには有効ですが、プログラムが複雑になってくると、コードの管理が大変になることがあります。
そこで登場するのがオブジェクト指向プログラミング (OOP: Object-Oriented Programming) です。OOPは、現実世界の「モノ」や「概念」をプログラム内で表現するための考え方です。関連するデータ(属性)と処理(操作)をひとまとめにした「オブジェクト」という単位でプログラムを組み立てていきます。
このステップでは、OOPの基本となる「クラス」と「オブジェクト」について学んでいきましょう!
クラス:オブジェクトの設計図
クラスは、オブジェクトを作るための設計図やテンプレートのようなものです。クラスには、オブジェクトが持つべきデータ(プロパティ)と、オブジェクトが行うことができる操作(メソッド)を定義します。
例えば、「車」というクラスを考えてみましょう。車クラスには、次のような情報や機能が考えられます。
- プロパティ (データ): 色、メーカー名、現在の速度
- メソッド (操作): アクセルを踏む、ブレーキをかける、現在の速度を表示する
PHPでクラスを定義するには、class
キーワードを使います。クラス名の最初の文字は大文字にするのが一般的です(パスカルケース)。
<?php
// 「車」クラスの定義
class Car {
// プロパティ (データ・属性)
public $color;
public $maker;
public $speed = 0; // 初期速度は0
// メソッド (操作・関数)
public function accelerate() {
$this->speed += 10;
echo "スピードが10上がりました。現在の速度: " . $this->speed . "km/h\n";
}
public function brake() {
$this->speed -= 10;
if ($this->speed < 0) {
$this->speed = 0;
}
echo "スピードが10下がりました。現在の速度: " . $this->speed . "km/h\n";
}
public function showSpeed() {
echo "現在の速度は " . $this->speed . "km/h です。\n";
}
}
?>
ポイント
class Car { ... }
でクラスを定義します。public $color;
のようにクラス内で変数を定義すると、それがプロパティになります。public
はアクセス権限の一種で、どこからでもアクセスできることを意味します(詳細は後述)。public function accelerate() { ... }
のようにクラス内で関数を定義すると、それがメソッドになります。- メソッド内でプロパティにアクセスするには
$this->プロパティ名
を使います。$this
は、そのメソッドが呼び出されたオブジェクト自身を指します。
オブジェクト:クラスから生まれた実体
クラスはあくまで設計図です。実際にプログラムで使うためには、クラスをもとにオブジェクトを作成する必要があります。オブジェクトは、クラスという設計図から作られた実体 (インスタンス) です。
先ほどの「車」クラスから、具体的な「赤いトヨタ車」や「青いホンダ車」といったオブジェクトを作ることができます。それぞれの車オブジェクトは、同じ「車」クラスから作られていますが、色やメーカー名などのプロパティの値は異なる場合があります。
PHPでオブジェクトを作成するには、new
キーワードを使います。
<?php
// Carクラスの定義 (上記と同じなので省略)
// class Car { ... }
// Carクラスからオブジェクトを作成 (インスタンス化)
$myCar = new Car(); // $myCar という変数にCarオブジェクトが代入される
$yourCar = new Car(); // $yourCar という変数に別のCarオブジェクトが代入される
// $myCar と $yourCar は、同じCarクラスから作られた別々のオブジェクトです
?>
new Car()
と書くことで、Car
クラスの設計図に基づいてメモリ上に新しいオブジェクトが作成され、そのオブジェクトが変数 $myCar
や $yourCar
に格納されます。
オブジェクトの操作:プロパティへのアクセスとメソッドの呼び出し
オブジェクトを作成したら、そのオブジェクトのプロパティに値を設定したり、メソッドを呼び出したりすることができます。これにはアロー演算子 ->
を使います。
プロパティへのアクセス
オブジェクト変数->プロパティ名
の形式で、プロパティの値を読み書きできます。
<?php
// Carクラスの定義 (上記と同じなので省略)
// class Car { ... }
// オブジェクトの作成
$myCar = new Car();
$yourCar = new Car();
// $myCar のプロパティに値を設定
$myCar->color = "赤";
$myCar->maker = "トヨタ";
// $yourCar のプロパティに値を設定
$yourCar->color = "青";
$yourCar->maker = "ホンダ";
// プロパティの値を取得して表示
echo "私の車の色: " . $myCar->color . "\n"; // 出力: 私の車の色: 赤
echo "あなたの車のメーカー: " . $yourCar->maker . "\n"; // 出力: あなたの車のメーカー: ホンダ
echo "私の車の現在の速度: " . $myCar->speed . "km/h\n"; // 出力: 私の車の現在の速度: 0km/h (初期値)
?>
メソッドの呼び出し
オブジェクト変数->メソッド名()
の形式で、オブジェクトのメソッドを実行できます。
<?php
// Carクラスの定義 (上記と同じなので省略)
// class Car { ... }
// オブジェクトの作成
$myCar = new Car();
$myCar->color = "赤";
$myCar->maker = "トヨタ";
// $myCar のメソッドを呼び出す
$myCar->showSpeed(); // 出力: 現在の速度は 0km/h です。
$myCar->accelerate(); // 出力: スピードが10上がりました。現在の速度: 10km/h
$myCar->accelerate(); // 出力: スピードが10上がりました。現在の速度: 20km/h
$myCar->brake(); // 出力: スピードが10下がりました。現在の速度: 10km/h
$myCar->showSpeed(); // 出力: 現在の速度は 10km/h です。
// 別のオブジェクト $yourCar も同様に操作できます
$yourCar = new Car();
$yourCar->color = "青";
$yourCar->maker = "ホンダ";
$yourCar->accelerate(); // $yourCar の速度が上がる ($myCar には影響しない)
?>
このように、各オブジェクトは独立しており、それぞれのプロパティ値を持ち、メソッドはそのオブジェクト自身のプロパティを操作します。
まとめ
今回は、オブジェクト指向プログラミングの基本となる「クラス」と「オブジェクト」について学びました。
- クラス: オブジェクトの設計図。プロパティ(データ)とメソッド(操作)を定義する。
class
キーワードで定義。 - オブジェクト: クラスから作られた実体(インスタンス)。
new
キーワードで作成。 - プロパティアクセス:
$object->property
- メソッド呼び出し:
$object->method()
クラスとオブジェクトの概念を理解することは、PHPでより複雑で再利用性の高いコードを書くための重要な第一歩です。
次のステップでは、クラスの構成要素であるプロパティとメソッド、そしてオブジェクトが作成されるときに自動的に呼び出される特別なメソッド「コンストラクタ」について、さらに詳しく見ていきましょう!