クラスの基礎

トップ > PHP入門 > クラスの作成

目次

広告

WADAX
安心の365日電話サポート付きレンタルサーバーです。
ロリポップ!
月額263円からのレンタルサーバー。マニュアルも充実しています。

クラスとは

PHPではオブジェクト指向と呼ばれるプログラミング手法を利用することができます。オブジェクト指向を導入すると、プログラムの再利用性・保守性が向上し、効率よくプログラミングを行うことができます。

オブジェクトはクラスを雛形として作成します。クラスは変数と関数を持つことができ、データをまとめて管理することができます。別々に変数や関数を定義するよりも保守性を向上させることができます。
「クラスからオブジェクトを作成する」作業は、よく「設計図から部品を作成する」作業に例えられます。

ただ、はじめのうちはオブジェクト指向のメリットは解りにくいかもしれません。その場合は無理にオブジェクト指向を導入する必要は無いと思います。ですが、オブジェクト指向の考え方を基に設計されたライブラリは多く存在するので、それらを使用するために最低限の知識は持っておいた方がいいでしょう。

クラスの作成方法

クラスは class を使用して、以下の書式で作成することができます。

<?php

class クラス名 {
  実装したい処理
}

?>

クラスが持つ変数をプロパティ と呼び、publicprivate で定義します。public の場合はクラスの外から直接アクセスできる変数になり、private の場合はクラスの外から直接アクセスできない変数になります。(PHP4の名残りで、public の場合は var と書くこともできます。)

クラスが持つ関数をメソッドと呼び、関数と同様 function で定義します。

定義したクラスからオブジェクトを作成するには new を使用します。作成したオブジェクトは各々が、クラスで定義したプロパティとメソッドを持ちます。プロパティやメソッドにアクセスするには、オブジェクトに対して -> (アロー演算子)を使用します。

具体的には以下のようになります。

<?php

//Mathクラスを作成
class Math {
  //プロパティを定義
  public $number1;
  public $number2;

  //メソッドを定義
  function add() {
    return $this->number1 + $this->number2;
  }
  function minus() {
    return $this->number1 - $this->number2;
  }
}

//Mathクラスのオブジェクトを作成
$math = new Math;

//プロパティに値を代入
$math->number1 = 7;
$math->number2 = 5;

//メソッドを実行して結果を取得
$result1 = $math->add();
$result2 = $math->minus();

echo "足し算の結果は{$result1}、引き算の結果は{$result2}です。";

?>

上の場合、$mathMath クラスのオブジェクトです。変数同様、名前は自由に付けることができます。$math に対して -> を使用することで、プロパティやメソッドにアクセスしています。

また、クラス内でプロパティやメソッドを参照するときは、$this という変数を使って呼び出すことができます。$this はメソッドの定義の中でのみ使用できる、特殊な変数です。

スコープ演算子

クラスは基本的に、new でオブジェクトを作成してから利用します。ですが :: (スコープ演算子)を使えば、クラスの内容に直接アクセスすることができます。

具体的には以下のようになります。

<?php

//Messageクラスを作成
class Message {
  //メソッドを定義
  function hello() {
    return "こんにちは";
  }
  function bye() {
    return "さようなら";
  }
}

//Messageクラスのメソッドを実行
$message1 = Message::hello();
$message2 = Message::bye();

echo "変数message1の内容は{$message1}、変数message2の内容は{$message2}です。";

?>

これを実行すると 変数message1の内容はこんにちは、変数message2の内容はさようならです。 と表示されます。

規模の大きなプログラムを複数の人で作成する場合、関数名や変数名が重複して正しく動作しなくなる可能性があります。ですがオブジェクト指向を利用すれば、クラス名さえ重複しなければ大丈夫なので、プログラムの保守性を向上させることができます。

クラスには他にも、クラスの継承インターフェースの定義など色々な機能があります。ですが既存のクラスを使う分には、とりあえずこれくらい知っておけばいいでしょう。