ボブ先生のスパルタPHP入門講座

chapter7 関数化しよう

ヘイガイズ!リサステッグマイヤー愛してんのかこの野郎!
オーケー今日もロックにご登場のボブ先生だ!

さて今日は関数化っつーものをやってみるかいベイビー達。 関数っつーのはなある特定の機能をまとめてオブジェクト(部品)にしたものだ。 車(もちろんキャデラック)を例にして説明するぜ。

例えば先生が愛車のピンクキャデラックに金髪美女を乗せてるとしよう。 そこで先生が取る行動ってのは
  • アクセルを踏む
  • ハンドルを回す
  • ブレーキを踏む
  • エルビスを聴く
こんな感じだ。これだけで車は動くわけだ。 つまり先生はアクセルを踏む、という行為のみすればよくて、シャフトが動いてエンジンに動力が伝わり〜、なんて そんなことは知らなくていいんだぜこのテツトモファンめ!
お前らタレ目野郎共がいま使ってるIEだって「URLを打ち込む」「お気に入りをクリックする」だけで サイトが見れるだろ?「URLを打ち込んだらDNSがどうのこうの」なんてこと知らなくてもいいだろ? つまりそういうことだ。

で、それで何?ってことになるわけだが、焦るなこのズルズル頭!
今回「ファイルを読み込む関数」を作ってみるぜ! ユーザ(プログラマー)はその関数にパラメータを渡すだけで、ファイルが読み込めるって代物だ!
<?php 
    
    
function readTextFile($sPath)
    {
        
$sRes NULL;
        
        
$fp fopen($sPath"r");
        if(
$fp)
        {
            
$sRes fread($fpfilesize($sPath));
            
            
fclose($fp);
        }
        
        return 
$sRes;
    }
    
    
$sFileName "dandy.txt";
    
    
$sDisp readTextFile($sFileName);
    
$sDisp nl2br($sDisp);
    
?>
<html>
<body>

<?= $sDisp ?>

</body>
</html>
実行するとこんな感じになるぜ!
オーケーハニーガイズ!それじゃあ先生が解説していくから、耳から脳漿垂れ流しながら良く聞いとけよ!

自作関数(line:3〜16)

今までのチャプターで使ったfopenなんかも関数の一つだ。 fopenは引数としてファイル名とオープンモードを指定するのは覚えてるよなこの鼻ちょうちん野郎! それと同じで先生が作ったこのreadTextFileって関数は、引数としてファイルパスを指定する。 それを定義したのが3行目だ。まあこうするもんだ、って思っとけ!

で、ファイル読み込み処理をこの関数内に書く。 内容は今までと若干違うからリファレンス読んでちゃんと理解しとけよこの鼻毛ボーン!

結果をリターンする(line:15)

いくら関数内でファイルを読んだからと言って、その結果を返さないと関数の意味がないよな!
そこでreturnという関数を使う。 これは実行結果を関数外に戻してくれるイカした野郎だぜ! ここではfreadで読み込んだ文字列を返しているわけだ。
return 100;とすると100という数値を戻すことになる。

自作関数をコールする(line:20)

上で作った自作関数を呼び出してるのがこの行だ。readTextFileに対して「dandy.txt」 っつー引数を渡してるよな! でその結果、returnで戻ってきた文字列を$sDispという変数に格納しているわけだ。

改行を入れる(line:21)

dandy.txtをそのまま読み込んで表示しただけじゃ、HTML上に改行は反映されない。 なぜかって?オイオイ頼むよSHYガイ。
テキスト上での改行は¥nかもしくは¥r¥nというコードが使われる。 でもHTMLでは<br>を使わないと改行だとは認識してくれないのはわかるだろ? それを自動的にやってくれんのがnl2brだ。
便利な関数だ、たびたび使うことになるからコンパで知り合った女の名前覚える前に、こっちをきっちり覚えとけ。

そしてあとはその$sDispを出力するだけ。こんな感じでファイルの読み込みが可能になる。
え?関数にする意味がわからない?ソーファッキンボーイ。

今回はダンディ坂野のプロフィールを読み込んだだけだから、恩恵がよくわからないかもしれないが、 じゃあダンディと河村隆一の2人のプロフィールを読んで表示するとしたらどうだ? ダンディと河村隆一とだいたひかるとMrマリックとえなりかずきと堂本剛を表示するとしたら? 同じ処理を6回書くか?それとも関数にして呼び出すだけにするか? 関数化した方が断然楽だしメンテナンスしやすいと思わねえか?

オーベイビーミルクヨーグルト!まあそんなわけで関数ってのを作ってみたんだが、わかったかこのトリ頭ども! 基本的には「同じ処理を書く必要のある個所が、他の場所にもある」場合は関数化したほうがいいだろうな!

今回は同じファイル内に関数の実体も書いてみたが、別ファイルに書くともっと汎用的に使えるようになる。 それはまあ、おいおいやっていくことにするぜ!

じゃあ今日のレクチャーはこれでおしまいだ!お前の人生もこれでおしまいだ!グッナイ!