【php】$thisとかnewとかなんだそれ!な人向けメモ | こんな感じ。その2

こんな感じ。その2

胡散臭い話からどうでもよい話まで。

節操のない感じに勉強していてわかんないことを覚え書くブログだよ。
今回は前回までの流れをまるで無視してphpです。
例によって自分が調べた範囲で書いてるので間違いがあれば指摘お願いします。

phpで見る「$this」って何なん?


元々ある程度独学でC言語を勉強してたんで変数とか関数とか宣言とか型とかそのへんはある程度知ってるつもりでいますが、
phpのソースコードを読ませてもらったりすると

$a = $this->******(); //******は適当なクラスとか関数

みたいなのが出てきて意味分からんってなりますよね。僕はなりました。
ソースの中を探してもどこにも「$this」なんて変数は宣言されてねぇじゃねぇか!と。
あとその後ろに続いてる「->」とかも何なんだ、と。

で、調べてみるとこの$thisはどうやら「擬似変数」と言うみたいです。
意味はそのまま「この(クラス)」という意味らしいです。
そして「->」は無理やり訳すと「~の中の」。
なので先ほどのコードはこういうふうに訳してみましたよ。

変数 $a に、このクラスの中の******というクラス(または関数の戻り値)を代入します


そんじゃあ「クラス」ってなんだよ、と。関数との違いは?とね。

クラスは値や動作をひとまとめにした「オブジェクト」


出ましたオブジェクト。
オブジェクトというのは直訳すると「物体」「対象」と言った言葉になります。
現実世界で言えば、「机」「猫」「宮崎あおい」など、
いろんなモノをオブジェクトということが出来ると思います。
で、各オブジェクトにはソレをソレたらしめる特徴を持っています。
phpではそれらの特徴を値と関数に分けて、「メンバ変数(プロパティ)」「メンバ関数(メソッド)」と呼ぶわけですね。

メンバ変数で言うと「机」が「木製」であることや「宮崎あおい」が「死ぬほどかわいい」こと
メンバ関数で言うと「机」を「2回」たたくと「コン、コン」となることや、宮崎あおいに「カエル」を見せたら「きゃあ!」と言うこと、(そしてその様子が死ぬほどかわいいこと)などが挙げられます。宮崎あおいのくだりは忘れましょう。

で、このクラスの定義はこういうふうに書きます。
例として先ほど挙げた机を取り上げてみましょう。

class Desk
{
//メンバ変数(プロパティ)

$color = "brown" ;
$material = "wood" ;
$height = 800 ; //単位:ミリメートル
$weight = 5000 ; //単位:ミリグラム
$sound = "コン "

//メンバ関数

function knock($times){
for($i = 0; $i <= $times; i++){
echo $this -> sound ; //同じクラス内のメンバ変数を使用するので$thisを使用
}
return 0;
}
}
//ここまでがクラスの定義

$desk = new Desk() ; // new <クラス名>で、クラスの中身を使用できる状態にする

echo $desk -> color ;
$desk -> knock(2) ;


はい、これでクラスの宣言と、宣言の使い方を書いてみましたよ。
このコードの実行結果はこうなるはずです。


brownコン コン 


ならなかったらごめんなさい

こうすることで、「特定の「何か」に対する処理であること」をわかりやすく、また、ひとまとまりにすることで扱いやすくする事ができるのがクラスの特徴だと思っています。

で、サラリと書きましたがクラスの外でクラスを使う場合は
最初に「new<クラス名>」で、適当な変数にクラスの中身を代入しておく必要があります。

クラスの宣言にもabstractとかpublicとかを頭に足すことで使える範囲が変わってきたりとかあるんですけど
そこまでやりだすと記事が終わらない気がしてきたのでやめときます。また別の機会に。


おや?


で、ここまで書いてきて「メンバ関数knockを作るとき、$this使わなくてもそのまま変数名でよくね?」と思ったわけなんですが。
つまり

function knock($times){
for($i = 0; $i <= $times; i++){
echo $sound ; //同じクラス内の変数なのでそのまま使用
}
return 0;
}

ってことですね。

クラス内では問題なく動くと思うんですが、
多分、それをやるとクラスの外でこの関数を呼び出した時には呼び出し側は変数$soundを持たないから

「$soundって変数知らないよ?」

ってなっちゃうんじゃないですかね(ふんわりとした解釈)


ということでものすごい初歩の部分だとは思いますが、phpのおさらいでした。

以下参考URL。
【 ほでなすPHP 】 PHPの基本 -> クラス
PHP: クラスの基礎 - Manual


ゼロからわかる PHP超入門
星野 香保子
技術評論社
売り上げランキング: 178320


Webサイト制作者のための PHP入門講座
鈴木 憲治 安藤 建一 小出 範明
技術評論社
売り上げランキング: 21140


ノン・プログラマのためのPHP入門 10日間コース
アシアル株式会社 海原 才人 笹亀 弘
翔泳社
売り上げランキング: 96455