関数を理解するには、作り方と読み方が必要だと私は考えています。
作り方というのは、自分で関数を作る(自作関数)ということで、
読み方というのは、人が作った関数を使うということです。
では早速作り方を・・・・という前に、関数についてちょっと前置きしておきあます。
先の記事でも書きましたが、関数というと y = ax + bというようなモノを
思い出す人が多いのではないでしょうか。
もっと簡単にしてみると、y = x + bこれも立派な関数です。
xとbを足した答えがyということになります。
このyを求める関数に、名前を付けてあげるとしましょう。
そうですねー。足してるだけなので・・・・tasu いや、プログラムらしく plusという名前を付けることにします。
ここで、関数を作るソースを見てください
<?php
function plus($x,$b){
return $x + $b;
}
?>
function 関数名 ( 関数で利用する変数の列挙) {
関数で行われる処理
}
これが関数の基本です。
関数名は、基本的に自由に決めて構いません。
ですが、何かルールがないと、何をするための関数なのか解らなくなってしまいます。
自分なりのルールで名前を付けるか、標準的な名前で関数名を付けるかは、おまかせします。
私の場合は、getData とか loadFile とか(動詞+名詞)的な名前を付けることが殆どですが・・・。
さて、ここまで引っ張りましたが、作り方の解説開始です。
上のソースコードを見てください。
3行目の「function」で、これは関数だということを明記しています。関数の名前は「plus」
この「plus」の関数で使う変数は、x と b です。
4行目の「return」は、この関数の終わりを表していて、「return」の後ろの内容が y になります。
つまり、plus関数の答えです。
これが基本中の基本で、関数内では色んな処理をして、return を使って答えを返すのです。
ところで上のソースコードは実行してみましたか?
実行しても、画面が真っ白だと思います。
それはそうですよね。echo命令を使って表示しているわけでもありませんし、
むしろ、関数を作っただけで実際にはPHPはなんの命令も実行していないわけです。
では、今作ったplus関数を実際に使ってみましょう。
<?php
function plus($x,$b){
return $x + $b;
}
$y = plus(5, 2);
echo $y;
?>
7行目で、作った関数を使っています。
$yの中には、関数内のreturnで指定されたものが入ります。
このように、関数名(使うデータの列挙)で使うことが出来ます。簡単でしょ?
でも、こんな必要ないような関数の説明では、全然関数の必要性が見えてきませんよね。
なので、関数について、もっといろんなものを体験した方が良いので、別の関数も作ってみましょう。
ということで、渡された配列のデータを、HTMLのテーブルにする関数を作ってみましょう。
(HTMLのテーブルの書き方がわからない人は、「HTMLの基礎」を読んでみてください。)
まずは、どんな関数にするのか、どんな処理をするかを頭の中に思い描きます。
慣れないうちは紙に箇条書きで書くとよりいいと思います。
関数の仕様は
2次元配列を受け取って、HTMLのテーブルデータにして返す。(echoでの出力はしない)
1.受け取ったデータを、foreach文で中身を取り出す。
2.行が始まるときは<tr>を変数に入れる。
3.列では<td> 1で取り出した中身 </td>を変数を入れる
4.行が終わるときは</tr>を変数を入れる
5.全部のデータが入ったらreturnでデータを返す。
さて、こんな感じの関数でいいかな・・・まぁ、やってみましょう。
<?php
function convertTable($arr){
foreach($arr as $k => $v){
$buff .= '<tr>';
foreach($v as $k1 => $v1){
$buff .= '<td>'.$v1.'</td>';
}
$buff .= '</tr>';
}
return $buff;
}
?>
といっても、ソースがすぐに出てきちゃうと、やれないですかね・・・。( ̄っ ̄;
とりあえず、動かしてみたり改造してみたりして触れてみて覚えてみてください。
眺めてるだけじゃ、理解できないともいますので・・・。
さて、せっかく作った関数です。つかってみます。
<?php
$array = array(
array("路線","駅名"),
array("山手線","新宿"),
array("山手線","渋谷"),
array("山手線","東京"),
array("山手線","品川"),
array("山手線","西日暮里"),
array("中央線","四谷"),
array("中央線","お茶の水"),
array("副都心線","新宿三丁目"),
array("副都心線","池袋")
);
function convertTable($arr){
foreach($arr as $k => $v){
$buff .= '<tr>';
foreach($v as $k1 => $v1){
$buff .= '<td>'.$v1.'</td>';
}
$buff .= '</tr>';
}
return $buff;
}
echo '<table border=1>'.convertTable($array).'</table>';
?>

適当につくった2次元配列を、関数に入れてみました。
returnで返ってきた$buffを、<table>と</table>で囲って表(テーブル)として出力しています。
実行すると左図のような結果になると思います。
これで、関数に渡すデータ(配列)次第で自動で表(テーブル)を作ってくれる関数ができました。
この関数は、まだまだ不便なところや、受け渡す関数次第でエラーだって出ます。
それらを出ないようにしたり、改良したりしていくのもプログラムの醍醐味の一つかもしれません。
さて、関数がどんなものかというのは、少し分かってきましたか?
では、ここまで・・・・といいたいところですが、一番最初に書いたように関数では人が作った関数を読むことも必要です。
正確には、関数の中身を読むのではなく何をする関数で、何を渡して何が返ってくるのかというの理解することです。
関数の中でどんなことが行われてるのかは、この際気にしなくてもいいでしょう。
ということで、次をみてください。
これはPHPのリファレンスページのスクリーンショットの一部です。
http://php.net/manual/ja/function.str-replace.php
関数の説明は、このような感じで書かれることが多いです。
また、PHPの関数リファレンスは、今後多く目にするかもしれませんので読み方を覚えておいて損はないでしょう。
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
返値 関数名 ( 引数1 , 引数2 , 引数3 , [ 引数4 ] )
という構成になっています。
返値は、returnで設定されているもので、mixedというのは不定のデータ型ということです。
データ型というのは、後で説明します。簡単に言うと返ってくるデータの種類ということです。
関数名は、もう説明しなくてもいいですね。
引数1、引数2・・・というのは、関数に渡すデータです。
作り方が分かれば見方はわかりやすいかな?
でもちょっと説明不足ですよね。
上の関数でいえば、mixedというのが返値(関数から返ってくる値)ということになりますが、mixedというのは何なのか・・・。
それは先述の通り不定のデータということです。不定では分かりづらいので、定まってるデータを例に挙げてみます。
int 整数(例:10
float 少数 (例:0.5
bool 真偽値(例:true
array 配列
string 文字列(例:こんにちは
ほかにもあるかもしれません。よく覚えてない(ぇw
ここで、mixedの説明を再度すると、不定ということは、上に上げたデータのどれかの値が入っているということです。
配列かもしれないし、整数かもしれない・・・・という何とも微妙な状態ですね。
先で示したPHPリファレンスのページの下の方を読んでもらえば、返り値という項目に、こう書いてあります
「この関数は、置換後の文字列あるいは配列を返します。 」
つまり、mixedは、文字列(string型)か、配列(array型)が、関数から返されるということになります。
引数の前についてるmixedも同じ意味です。引数にも受け渡すデータの型が関係しています。
使い続けていれば、少しずつ覚えてくると思いますので、あまり気にせずに使っていきましょう。
さて、これで関数はおしまいですが、これは基本の基本で説明も、かなり端折ってますので
使っていくうちになれていってください。
では、次は実際にプログラムを作っていってみましょう。








