【徹底解説】PHPの$thisはこう使う!

PHPで$thisってよく出てくるけど、理解せずにつかってるかも。

こんなことってありませんか?

PHPを使って開発をするなら、必ず理解しておきたい$this

今回は【徹底解説】PHPの$thisはこう使う!をご紹介します。

まずクラスを理解する

$thisを理解するために、クラスという概念を理解せずには通れません。

まずは簡単なプログラムを使ってクラスという概念を解説していきます。

クラス=「誰がどんな能力を持っているか」

クラスという概念は、初学者にとってはつまづくポイントです。

難しいことは、シンプルに理解しましょう。

ずばり、クラスとは「誰がどんな能力を持っているか」を表現したもの、です。

例えば、ユーザをクラスとして表現するためにUserクラスをプログラムで定義してみます。

ここでUserが持つ能力をまとめると、

名前($name)を持っている
メールアドレス($email)を持っている
住所($address)を持っている

です。

このようにクラスを使えば、誰がどんな能力を持っているか、という表現ができます。

ここで、$nameや$email、$addressのことをプロパティと呼ぶことも覚えておきましょう。

privateと$thisはセットで使う

ここからが本題の$thisの使い方について解説していきます。

まず結論から言うと、privateがあったら$thisを使う、と理解しておいてOKです。

では、実際にprivateを使ってプログラムを書いてみます。

privateには大事なルールがあります。

それは、privateを使うなら必ず$thisを使ってプロパティの値を変更する、というルールです。

このプログラムの例では、privateとして指定したプロパティは、$this->nameのようにして値を変更しなければなりません。

これはパターンなので、そういうものとして理解しちゃいましょう。

privateなプロパティは、必ず$thisを使ってプロパティの値を変更する

privateはバグを減らすための仕組み

そもそも、なぜprivateが必要なの?
むしろ複雑になって、開発が面倒になっているのでは?

という疑問がありますよね。

では、先のプログラムをprivateを使わないようにしてみます。

このプログラムの場合、$name, $email, $addressは$userという変数が有効である限りどこからでも、書き換えることができます

例えばもし、ここでバグが発見されたとしましょう。すると、

バグの原因は、Userクラスかもしれない。。。
$userという変数が書かれているファイル検索してみよう。
300ファイルもある。。。終わった。。。

という事態が起きてしまいます。

つまり、どこからでも書き換えることができると、バグが発生したときに$userという変数が書かれた箇所をすべてチェックすることになります。

そこでprivateです

例えば、privateなプロパティに$user->name = ‘hoge’として変更してみます。

すると、Fatal error: Uncaught Error: Cannot access private property 」とエラーになります。

ここでprivateを使うときのルールを思い出します。

privateなプロパティは、必ず$thisを使ってプロパティの値を変更する

つまり、このプログラムではプロパティの書き換えるときは必ずsetUser関数を使う、というルールが出来上がります。

このようにprivateを使うと、どこからでも書き換えることはできない代わりに、チェックすべき箇所を絞ることができるようになります。

$thisと似ているself::の使いどころ

$thisについてある程度、理解している人でも

$thisとself::ってどうやって使い分けるんだっけ?

という人 も多いはず。

ここで$thisと併せてself::についても解説します。

そもそも$thisかself::の使い方で悩む最大の理由は、$thisもself::も使い方が似ているからです。

では、どんなときにself::を使うのでしょうか?

self::とconst/staticはセットで使う

結論から言うと、constかstaticがあればself::を使う、です。

百聞は一見にしかずです。プログラムで解説していきます。

例えば、商品情報をもつProductクラスがあるとします。

constでも、staticでもself::を使って変数を取得できます

constとstaticの最大の違いは、

constな値は書き換えることができない
constな変数は大文字で宣言する
staticな変数は(同じクラスなら)変更することができる

このプログラムでは、商品の消費税(TAX)のような変わらない値はconst、値段の単位は同じProductクラスなら変更できる変数としてstaticを利用しています。

まとめ

いかがでしたか?

今回は、「徹底解説】PHPの$thisはこう使う!についてご紹介しました。

$thisを使って効率よく開発を進めることができます。

ぜひ参考にしてみてくださいね。