……PHPの class{ } の扱い方がなんとなく…… :: 前編
なんとなくだけど、クラスの使い方が解った。いろいろ間違っているかも知れませんけれども、ちょっと進んだ感じがして嬉しかったよ。
使い方を理解するまでは、ボクには幾つかの壁があったので……どうやって、その壁を抜けた順序を恥を書くのを承知で書いてみる。くれぐれも、使いこなせてるいるわけではなくて、扱い方が『なんとなく』解っただけですので。
その1 class{ } の { } に何があるのか知る
まず最初に、簡単なクラスの図を書いてみます。
class クラス名 { //プロパティ部 public $プロパティ名 //メソッド部 function メソッド名(引数){ 処理部分 } }
正しい『プロパティ』とか『メソッド』とかの説明は、PHPのマニュアルとかオブジェクト指向の本とか読んでしっかりと理解したほうがいいです。なんとなく解った気でいいなら……ボクの理解の範疇で言うと、こんな感じ。
- プロパティ …… オブジェクトで使う 変数。メンバー変数とか言ったりもする。
- メソッド …… オブジェクトで使う 関数。メンバー関数とか言ったりもする。
扱い方を知るだけなら、最初はコレでもいいんじゃないかな。
さて、上の適当なクラスの図を見ると、class{ } の中には、プロパティとメソッドがあるわけです。というか、プロパティとメソッドの2つしかないのです。だとしたら、どちらかを理解すれば、class{ } 中身の半分を理解したも同然なんですよね。
その2 ユーザー定義関数を知る
続いて覚えるのは、PHP: ユーザー定義関数 - Manual。いわゆる、function。その1のクラスの図でいえば、メソッド部に当たる部分です。なんで、function を先に理解するのかというと、『ユーザー定義関数』というカテゴリでいろいろと説明してくれている資料があるから、独学でも覚えやすいと思うから。
『class{ }を理解する』という命題の段階で言えば、オブジェクト指向と絡める必要はないと思う。『便利だから使う・使いたい』というところに、理解を進めるためのカギがあると思うのですよ。class{ } 使わなくたって、functionは十分過ぎるほどの便利関数なのです。
じゃあ、function メソッド名(引数){ } ってなにさ? となるので……function部の図を書いてみます。
function メソッド名 (引数) { 処理部分 }
コレも、3つに分けて『なんとなく』理解するといいと思います。
- メソッド名 …… ユーザー定義関数の名前。メソッド名は、単純に識別用にあるだけなので、処理が解りやすい名前がいいと思う。『function hoge ()』でもいいですし、最悪、『function hairetsunisitemodosu ()』でもいいです。
- 引数 …… ( ) の中に入れたものが、処理部分で使えます。引数を 『,(半角カンマ)』 で区切れば、幾つもの引数が使えます。(『なんとなく』理解の為に、デフォルトの『値渡し』の理解を優先することをオススメします)
- 処理部分 …… 関数の部分。ここに処理したいことを書く……けれども。
ボクは正直、ココでいろいろ考えてしまって、理解が止まってしまいました。ボクの最大の疑問は、『わざわざユーザー定義関数にする必要なんてあるのか?』 という部分でした。何故なら、ちょっとした、Webアプリケーションなら、ifとHTMLのフォームだけでぜんぜん動いちゃうのですw なぜ、わざわざfunctionなんかを使うのかと。いちいち、functionと書くよりも、使い回しを行いたい部分は、コードをコピー&ペーストすればいいじゃないかと。
だけど、ボクがこの疑問を払拭できた唯一の方法は、『とにかくなんでも function の { } の中に入れて、書いてみる』でした。引数と処理部分の関係さえ身につくまで、echo だけでも書いてみる。とても、アホらしい解決方法ですが、実に有効でした。
例えば……『Hello,』をつけて表示してくれるユーザー定義関数を作ってみる。とか。
<?php // 処理内容は 『Hello,』をつけて表示するだけの foo() を作成 function foo($bar) { echo "Hello," .$bar; } // 処理内容は 横罫引くだけの hr() を作成 // // 渡したい引数がなければ、なくてもOK function hr() { echo "<hr>"; } //実際に使うときは、ユーザー定義関数 : foo に渡したいのを ( )の中に入れてあげる。 $bar="PHP!!"; foo($bar); // ユーザー定義関数名だけで問題なし hr(); //$bar 以外でもぜんぜんOK $word="kwsktr"; foo($word); hr(); //当たり前だけど配列でもぜんぜんいける $array = array('北海道','東京','沖縄'); foo($array[1]); ?>
Hello,PHP!!
Hello,kwsktr
Hello,東京
こんなアホみたいなのでも、とにかく書くことで……だんだんと身についてくるモノがあるのです。それについては……眠いからここまで。プロパティについては、その3は後編へ続く。
■PHP初学者〜初心者が、ステップアップするためにオススメのPHP関連書籍
- amazonでは基礎からのPHP [基礎からシリーズ] (SE必修!プログラマの種シリーズ)の評価が低いんだけど、理由が分からない。『基礎からの』というタイトルが悪いのかな? 多少理解してきた初学者が読むには良い書籍ですよ。
- PHP 逆引きレシピ (PROGRAMMER’S RECiPE)は、自信を持って勧められるPHPレシピ集。会社の人間に貸して勧めたところ、3名が絶賛して購入してくれました。
- PHPによるWebアプリケーションスーパーサンプル 第2版も、なかなか良いPHPサンプル集。本がデカくて厚いのが難点かな。サンプルCDが付いてきます。
- PHPによるWebアプリケーションスーパーサンプル活用編 第2版は、『活用編』。まだ買ったばかりだけど、いろいろなWebアプリケーションやWebサービスの使い方が書かれているので、向学心を煽ってくれます。