PHP – オブジェクト指向とは?クラスとオブジェクトの作り方を解説
オブジェクト指向とは、簡単に言うと変数と関数をまとめた設計図を基に、オブジェクトを効率的に量産する手法です。オブジェクト指向を活用することで、より効率的なプログラミングが可能となるので必ず理解しておきましょう。本記事では、基本的な考え方から作り方まで解説します。
目次
オブジェクトとは?
オブジェクトは、変数や関数の情報をまとめたものです。また、オブジェクト内の変数をまとめてプロパティ、関数をメソッドと言います。
クラスとは?
クラスはオブジェクトを作成するための設計図のようなものです。そして、クラスを基にオブジェクトを作成することをインスタンス化と言います(オブジェクトとインスタンスは同じ意味です)。例えば、たくさんプレイヤーオブジェクトを作成する場合に、あらかじめPlayerクラスという設計図を作成しておけば、後はその型の通りにオブジェクトを効率的に作成していくことができます。
クラスとインスタンス
クラスとインスタンスの作り方についてサンプルコードを見ながら理解していきましょう。
クラスの作り方
クラスを作成するためには、「class クラス名 {クラスの内容}」の形式で書きます。尚、クラス名の先頭は大文字という決まりがあります。
class Player {
//クラスの内容
}
インスタンス化
クラスを基にインスタンス化する時は、「$変数名 = new クラス名()」の形式で書きます。以下の例では中身は空ですが、「Player」というクラスを基に「player1」というインスタンス(オブジェクト)を作成しています。
class Player {
//クラスの内容
}
$player1 = new Player();
プロパティ
プロパティは「public $プロパティ名」の形式で書きます。プロパティ名の前にあるpublicはアクセス修飾子といい、アクセス権を指定しています。publicは日本語で公的といった意味なので、どこからでもアクセス可能ということです。他にもアクセス装飾子はありますが、ここでは割愛します。
class Player {
public $name;
}
プロパティへのアクセス
インスタンスのプロパティにアクセスするためには、「インスタンス->プロパティ名」の形式で書きます。尚、プロパティ名に「$」記号は不要です。「->」の記号はアロー演算子と呼び、プロパティやメソッドにアクセスするための演算子です。
class Player {
public $name;
}
$player1 = new Player(); //インスタンス化
$player1->name = 'ほげ美'; //プロパティに値を代入
echo $player1->name; //プロパティの値を出力
メソッド
メソッドは「public function メソッド名(){処理内容}」の形式で書きます。publicはプロパティと同様にアクセス権の指定をしています。
class Player {
public function move() {
echo 'プレイヤーは移動した';
}
}
メソッドの呼び出し
インスタンスのメソッドを呼び出すには「インスタンス->メソッド名()」の形式で書きます。
class Player {
public function move() {
echo 'プレイヤーは移動した。';
}
}
$player1 = new Player(); //インスタンス化
$player1->move(); //メソッドの呼び出し
$this
$thisという変数を用いることで、メソッド内でプロパティやメソッドにアクセスすることができます。ただし、$thisはクラス内でメソッド定義するときだけに使用できます。
class Player {
public $name;
public function move() {
echo $this->name.'は移動した。';
}
}
$player1 = new Player();
$player1->name = 'ほげ美';
$player1->move(); //結果:ほげ美は移動した。
コンストラクタ
コンストラクタはインスタンスの生成時に自動的に呼ばれるメソッドのことです。クラス内でメソッドを定義するときに「__construct(){処理内容}」の形式で書きます。このコンストラクト内で書いた処理が自動的に呼ばれるというわけです。
class Player {
public function __construct() {
echo 'プレイヤーが新規作成されました。';
}
}
$player1 = new Player(); //結果:プレイヤーが新規作成されました。
引数の指定
コンストラクタで引数を受け取るように設定しておくことで、インスタンス生成時に引数を与えた処理を実行させることができます。
class Player {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$player1 = new Player('ほげ美');
echo $player1->name; //結果:ほげ美