#phpのクラスについて
phpにおけるクラスの考え方と、クラスの中にあるプロパティとメソッド、さらにはインスタンスの生成、そして根本のオブジェクト指向について、初心者の方でも分かりやすく丁寧に解説します。
#オブジェクト指向について
まずはオブジェクト指向について触れます。
phpはオブジェクト指向のプログラミング言語です。
まずは初学者にとっては、オブジェクト指向って何?
という疑問を抱く人も多いとおもいます。
私もそうでした。最初は誰しもが疑問に持つポイントだと思います。
簡単に言うと、オブジェクトという一つの型を決める(作る)ことによって、
いつでもその型から、同じものを複製したり、あるいは似たものを複製することが出来ます。
プログラムを効率的に書くためにある仕組みです。
##具体例
例えば、phpでスタッフを登録したいとします。居酒屋でもファーストフードでもカラオケでも構いません。
スタッフには名前と年齢があるとします。
このスタッフをプログラムで作成していくために、皆さんはどんなふうにすれば効率良くコードが書けると思いますか?
- 連想配列を作成して、配列の中に入れていく
- データベースに登録していく
- クラスとして定義し、インスタンスを作成する
どれも一長一短で正解です。
そのプログラムの規模や内容、更新頻度などによって、いずれかを選択することになると思いますが。
今回はこちらのやり方で、解説しようと思います。
3. クラスとして定義し、インスタンスを作成する
#クラス class
クラスには、プロパティとメソッドというものがあります。
最初は全くイメージもつかめないと思いますが、何も難しく考える必要はありません。
プロパティとはクラス内で定める変数で、メソッドは関数です。
クラスを理解する上では必須の内容なので、以下に詳しく書いていきます。
##プロパティ
まずはプロパティについて例を挙げて考えてみましょう。
スタッフというクラス(型)の中に、名前と年齢があるとします。
name | age |
---|---|
田中 | 18 |
佐藤 | 22 |
山本 | 34 |
田中というnameの人は、ageが18なわけです。
そのままですね。
言い換えると、
一番はじめに、スタッフというクラスに、nameとageというプロパティがあるよって宣言してあげることで、あとあと、簡単にスタッフを追加してあげられる仕組みを作れるのです。
###実際にコードで確認します
<?php
// Staffというクラス(型)を宣言。クラスの1文字目は大文字
class Staff {
// property
public $name;
public $age;
}
//クラスStaffのインスタンスを作成
$tanaka = new Staff;
//インスタンス名->プロパティ名 ※プロパティの"$"はつけない
//tanakaというインスタンスのプロパティ$nameに、tanakaを挿入。
$tanaka->name = "tanaka";
echo $tanaka->name; // tanaka
###ポイント
クラスを宣言しておくことで、new演算子(new)を使い、Staffのインスタンスを作ることができます。インスタンスは、クラスで定義したプロパティを受け継いでいるもの(すなわちnameとageという変数が宣言された状態)を指します。
プロパティを宣言しておくことで、アロー演算子(->)で、そのクラス(インスタンス)のプロパティに値を入れることが出来るようになります。
##コンストラクター constructor
これは後述するメソッドの一種であります。
クラスを作る上で、だいたい使われるものなので理解しましょう。
インスタンス作成時に実行される関数と覚えてください。
書き方は決まってるので覚えるだけです。
public function __construct(インスタンス作成時に渡される引数)
###実際にコードで確認します
<?php
// Staffというクラス(型)を宣言。クラスの1文字目は大文字
class Staff {
// property
public $name;
public $age;
// constructor
public function __construct($name) {
$this->name = $name;
}
}
//クラスStaffのインスタンスを作成。(引数で$nameに渡してあげます。)
$tanaka = new Staff("tanaka");
//index.phpで書いていた下記が必要なくなります。
//$tanaka->name = "tanaka";
echo $tanaka->name; // tanaka
###ポイント
コンストラクタを決めておくことで、引数で値を受け渡し、プロパティにそのまま代入することができます。
インスタンスを作成した時に必ず実行されるのがこのコンストラクタです。
ちなみに今回は、引数を変数nameとして受け取っていますが、これはプロパティの$nameとは違うものです。
そのため、index2.phpは下記のindex3.phpを全く一緒の結果になります。
<?php
// Staffというクラス(型)を宣言。クラスの1文字目は大文字
class Staff {
// property
public $name;
public $age;
// constructor
public function __construct($staff_name) {
$this->name = $staff_name;
}
}
//クラスStaffのインスタンスを作成。(引数で$staff_nameに渡してあげます。)
$tanaka = new Staff("tanaka");
//index.phpで書いていた下記が必要なくなります。
//$tanaka->name = "tanaka";
echo $tanaka->name; // tanaka
##メソッド
次にメソッドをみてみましょう。いわゆる関数ですね。プロパティの変数のように、ただ値を入れるだけでなく、簡単な機能がついているというニュアンスで理解しましょう。
###実際にコードで確認します
<?php
// Staffというクラス(型)を宣言。クラスの1文字目は大文字
class Staff {
// property
public $name;
public $age;
// constructor
public function __construct($name) {
$this->name = $name;
}
// method
public function Hello() {
echo "hi, i am $this->name!";
}
}
//クラスStaffのインスタンスを作成。(引数で$nameを入れてあげます。)
$tanaka = new Staff("tanaka");
echo $tanaka->name; // tanaka
$tanaka->Hello(); // hi, i am tanaka!
###ポイント
メソッドとしてHelloを宣言することで、その処理が簡単に実行できているのが分かると思います。
今回は一個のインスタンスしか作成していないので、わかりづらいですが、何個も同じようなスタッフを登録することを考えた場合、はじめにメソッドを決めておくだけで、
インスタンス名->メソッド名;
同じような処理をこの1文で、出来るので大きなサイトになる上では欠かせない機能になります。
#まとめ
クラスを宣言し、プロパティとメソッドさらにはコンストラクタを宣言してあげ、インスタンスで複製を作るという基本形を理解出来れば、後は応用していくだけです。
ここまでがマストな考えなので、まずは理解しましょう。
実際に自分でコードを書いたり改造することで理解も深まるはずです。
次回は、親クラスと小クラスの考えについて継承や、権限について更新していこうと思います。