少し前からProgateの有料会員になり、PHPのオブジェクト指向プログラミングの勉強をしてました。
最初は無料会員で勉強してたんですが、オブジェクト指向プログラミングは有料会員限定だったので登録しました。
月額980円なので参考書を1冊買うよりも安いですし、とてもわかりやすい解説&自分でコードを書きながら勉強できるので、参考書で勉強するよりも理解が早いので非常にお得です。
今回はこのProgateで学んだオブジェクト指向プログラミングについて自分の復習のため&プログラミング初心者の方が少しでも理解を深めることができるよう解説していきます。
オブジェクト指向プログラミングがどんなものかざっくりとは知っているけど、いまいち理解し切れてないくらいレベルの方向けです。
理解しやすさ優先で書いているので、厳密に言えば少し違うといった部分も多数あるかと思います。
クラスを作る
まず最初に入れ物を作ります。それがClass(クラス)です。クラスは以下のように定義します。
class クラス名 {
}
※このクラス名は頭文字を大文字にします。
入れ物を作ったら次は中身を作っていきます。
プロパティとメソッド
クラスという入れ物に持たせることができるパラメータにプロパティとメソッドがあります。
プロパティとはクラス自体に設定することができる変数です。
class クラス名 {
public $a;
}
プロパティはこのように定義します。
頭についているpublicの部分はprivateやprotectedが入ることもあります。それぞれには以下のような意味があります。
- public → クラス外・クラス内のどちらからでもアクセスできる
- private → クラス内からのみアクセスできる
- protected → クラス内・継承したクラス内からのみアクセスできる
外部から好き勝手変更できないようにするため、プロパティはprivateにしてクラス内からのみアクセスできるようにすることが多いです。
また、メソッドとはクラス内に定義できる関数です。
書き方は、
class クラス名 {
public function メソッド名(){
//中身
}
}
このようになります。こちらもプロパティと同じく必要に応じてpublic以外の設定を使用します。
thisの使い方
オブジェクト指向プログラミングを勉強しているときまず躓くのがこのthisだと思います。
最初わからないので調べて、そのときは何となく理解したつもりになっていても、すぐまたわからなくなって調べ直すということを私は繰り返してましたw
そんなthisについて説明していきます。
thisはどのようなときに使うかと言いますと、クラスのメソッド内からプロパティにアクセスするときです。
例を使って説明します。
まず、以下のようなクラスがあり、$aというプロパティが定義されているとします。
class クラス名 {
public $a;
}
このクラス内に関数(メソッド)を定義して、その関数(メソッド)でプロパティの値を使用したいとします。その際、
class クラス名 {
public $a;
public function test() {
print($a);
}
}
このように書きたくなりますよね?
しかし、この書き方ではエラーが出てうまく動作しません。
プロパティはあくまでクラス自体に設定されている値です。
メソッド内で設定している訳ではありません。
そのためメソッドでその値をそのまま使うことはできません。
ではメソッド内でプロパティを使うにはどうすればいいのか、その答えがthisです。
thisを使うとメソッド内からクラスのプロパティにアクセスすることができるようになるのです。
つまり先程の例は正しく書くと、
class クラス名 {
public $a;
public function test() {
print($this->a);
}
}
こうなります。
ちなみに、メソッド内でプロパティと同じ変数名を使用することができます。
class クラス名 {
public $a = "プロパティ";
public function test() {
$a = "メソッド";
print($this->a); //プロパティと出力される
print($a); //メソッドと出力される
}
}
このように変数名は同じ$aではありますが、プロパティとメソッド内で定義した変数は全くの別物として扱われます。
thisについてちゃんと理解していないとここで混乱してしまうので、しっかり覚えておきましょう。
PHPでオブジェクト指向プログラミング入門まとめ
オブジェクト指向プログラミングの基本となるクラスの書き方の基本を解説してきました。
まだ勉強したことの半分にも達してませんが、長くなるので一旦今回はここまでとします。
次からは勉強した残り部分の解説と、オブジェクト指向プログラミングを学ぶことによって具体的にどのような利点があるかなどのお話もしていきたいと思います。