クラスとは、関数の集合体です。
一定の規則に従い、種類ごとにクラスを定義します。
関数の集合体と言いましたが、データの扱い方が全くことなります。
関数は、与えられた値を処理して返すなどの処理を行うのみですが、クラス(オブジェクト)では自分自身の中にデータを格納しておきます。
オブジェクトとは、クラスをコピーしたものを指します。
クラスを元に作業用のオブジェクトを生成し、データを格納したり処理を行うのです。
一つのクラスから複数のオブジェクトを生成することが可能で、これによりデータの不整合を回避します。
このようにクラスを元にオブジェクトを生成することをインスタンス化すると言います。
もし、インスタンス化せずに使用すると、1つのクラスを複数同時に実行した場合、データが上書きされて意図しない値が返されちゃいますからね。
メソッドとは、クラス内に定義して処理を行う部分です。
例として、testというメソッドを作成します。
class hoge {
public function test() {
echo "test";
}
}
上記のtestメソッドを他のクラスから呼び出すには、インスタンス化して使用します。
$hogeClass = new hoge();
$hogeClass->test();
このように new してインスタンス化することで初めて使用できるようになるのです。
ちなみに同じクラス内から呼び出す場合は「$this->メソッド名();」として使用します。
アクセス修飾子は、クラスの中で使用するメンバ変数やメンバメソッドを宣言する際に使用します。
PHPでは、「public」「private」「protected」の3種類あり、適切に設定する必要があります。
基本は以下のようにして記述します。
class クラス名{
アクセス修飾子名 メンバ変数名;
アクセス修飾子名 function メンバメソッド名(){
処理;
}
}
アクセス修飾子は、参照できる範囲を決めるためのもので、それぞれ以下のようになっています。
アクセス修飾子 | 範囲 |
---|---|
public | クラス内、クラス外のどこからでもアクセス可能 |
private | 同じクラス内からのみアクセス可能 |
protected | 同じクラス、及び子クラスからアクセス可能 |
protectedは継承したときに関わってきます。
全部publicでも処理は問題なく動きますが、これらの宣言を適切に行うことで、バグを抑える・分かりやすいコードになるなどのメリットがあります。
メソッド定義の先頭にstaticを記述することで静的メソッドとなります。
静的メソッドとは、与えられた値を処理して返すだけなど、クラス内でデータを格納する必要が無い場合に定義します。
通常のクラスを利用するにはインスタンス化する必要があると言いましたが、このstaticメソッドは例外としてインスタンス化せずに使用します。
そもそも、データを保持しないのでインスタンス化する必要はないですね。
class hoge {
public static function test() {
echo "test";
}
}
これらを呼びだすときは、「::」演算子を使用します。
hoge::test();
このように簡単に呼び出すことができます。
同じクラス内から呼び出すときに「$this」は使えません。
self::メソッド名として使用します。
名前の通り、クラス内で使用する定数を定義します。
static変数同様にインスタンス化は行いません。
class hoge {
const name = "hoge";
}
これらを呼びだすときは、「::」演算子を使用します。
echo hoge::name;
特定のクラスでのみ使用する定数をconstで宣言することで分かりコードを記述できます。