最近業務の独自のフレームワークを使った案件で$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
を表示したのだ。
編集後記
入社三日目
なんだか褒められて伸ばされている気がするが
それに比例してプレッシャーが凄い。
でも飛躍的な成長は大きな痛みを伴いやすいので
日々昨日の自分を超えるしか無いのかな、って思う。
そんな感じの事をイチローが言ってたな笑