最近業務の独自のフレームワークを使った案件で$thisというのが良く出てくるので、調べたことをメモしてみます。
$thisはインスタンス自身を指す。
と簡単に言われても良くわからないので
整理して説明すると
class (クラス)
クラスとは複数の処理をまとめた設計図みたいなもの。
あくまで設計図、これがそのまま色々動いて処理を返すわけではない。
instance (インスタンス)
インスタンスとはクラスという設計図を元に作成したロボットのようなもの。
これが色々動いて処理を返してくれる。
そんでどうやってクラスを作ってインスタンスを作るのかというと
<?php
class kurasu{
public function hyouzi(){
echo 'ひょうじ';
}
}
$insutansu=new kurasu;
$insutansu->hyouzi();
?>
こんな感じに書く。
kurasuという設計図にはhyouzi()という機能が設計されている。
その設計図を元に作られた$insutansuロボットは$insutansu->hyouzi();と命令を出すことで動いてくれる。
というイメージ。
$this
そして結局$thisがどういうことなのかというと
設計図を元に作られたロボット自身の事を指す。
この指すというのは、設計図に書かれているが設計図の事を指しているわけではない。
では$thisの使い所を説明していく。
<?php
class kurasu{
public $hensu='TEST';
public function hyouzi(){
echo $this->hensu;
}
}
$insutansu=new kurasu;
$insutansu->hyouzi();
?>
こんな感じで書いていく
今度は設計図には$hensuという情報と、その情報を表示する機能であるhyouzi()が設計されている。
その設計図を元にしたロボットである$insutansuは、当然設計図どおりに$hensuを覚えているので
$insutansu->hyouzi();と命令を出すとTESTと表示する。
まぁこれだけではわかりにくいので
<?php
class kurasu{
public $hensu='TEST';
public function hyouzi(){
echo $this->hensu;
}
}
$insutansu_a=new kurasu;
$insutansu_z=new kurasu;
$insutansu_a->hensu='テスト';
$insutansu_a->hyouzi();
$insutansu_z->hensu='てすと';
$insutansu_z->hyouzi();
?>
今度はこう書いてみた。
kurasuという設計図で、2つのロボット$insutansu_aと$insutansu_zを作った。
それぞれに
$insutansu_aには$insutansu_a->hensu='テスト';
$insutansu_zには$insutansu_z->hensu='てすと';
と$hensuの情報を変更してみた。
そして最後に2つのロボットは同じ機能であるhyouzi()を実行する。
結果はどうなるか想像出来るだろうか?
2つのロボットは同じ機能を実行したにも関わらず
$insutansu_aはテストと表示し
$insutansu_zはてすとと表示する
異なる結果になる。
これはhyouzi()の中の$thisによるもので
$insutansu_aの$thisは$insutansu_a自身、
$insutansu_zの$thisは$insutansu_z自身
を指している。
hyouzi()の中の$thisは設計図を指してはいない。
なので2つのロボットはそれぞれ自身が覚えている$hensuを表示したのだ。
編集後記
入社三日目
なんだか褒められて伸ばされている気がするが
それに比例してプレッシャーが凄い。
でも飛躍的な成長は大きな痛みを伴いやすいので
日々昨日の自分を超えるしか無いのかな、って思う。
そんな感じの事をイチローが言ってたな笑