関数ここまで来るまでに、既に何度か登場している「関数」について解説します。 関数とはファ、ファ、ファンクション!・・・。 「変数」のページで、「関数は野菜ジュースを生産する工場です。」なんて事を書きました。この阿呆な例えを踏まえた上で、次のサンプルと結果をご覧下さい。
Tomato Carrot Onion Juice!!!(1) Tomato Carrot Onion Juice!!!(2) Tomato Carrot Onion Juice!!!(3) Tomato Carrot Onion Juice!!!(4) Tomato Carrot Onion Juice!!!(5)
関数は、定義しただけでは何も起こりません。関数内の処理を実行するには、関数を呼び出す(コールする)必要があります。サンプルの中の「for($i = 0; $i < 5; $i = $i + 1){ juice(); }」の部分が、「関数juice()」を呼び出している所です。「for文」で5回呼び出しているので、5回処理が実行されています。 このように、関数は一連の決まった処理を何回も実行させたい時に便利なのですが、関数の本来の役割は、「与えられた値を加工して返す」というものです。
ちなみに、サンプルコードの中の「$vege1.$vege2.$vege3."Juice!!!(".$num.")<br />"」の部分ですが、この中の「 関数にも名前を付けましょう関数も変数同様、命名規則に沿って名前を付けなければなりません。基本的に変数の時と同じですが、「大文字と小文字を区別しない」という点で異なります。また、後で解説しますが、PHPには既に定義されている関数が幾つか(1000個以上)あり、これらと重複してはいけません。更に、PHPには「予約語」と呼ばれる、PHPにおいて意味のあるワードがあり、これらとも重複してはいけません。この予約語には、既に解説した制御構造(「if」等)やその他諸々があります(詳しくは本家のマニュアルの「付録」セクションの「予約語の一覧」のページをご参照下さい)。重複させるとエラーになります。しかし、これらの名前の付けられ方にはちょっとクセがあるので、そのクセを見付けて回避すれば、特に神経質になる必要はありません。
また、PHPは「 関数の役目引数関数は一連の決まった処理を何回も実行させたい時に用いると便利ではありますが、関数が果たすべき最も重要な役目は、「与えられた値を加工して返す」というものです。これを踏まえて、以下のサンプルと結果をご覧下さい。
Tomato Carrot Onion Juice!!!(1) Tomato Carrot Onion Juice!!!(2) Tomato Carrot Onion Juice!!!(3) Tomato Carrot Onion Juice!!!(4) Tomato Carrot Onion Juice!!!(5)
結果は前回とたまたま同じですが、関数定義の部分と関数を呼び出している部分に追加されたものがあります。いずれも関数名の後の「
関数名の後ろにある「
今回のサンプルの場合は、関数を呼び出している部分の「"Tomato", "Carrot", "Onion"」の「 仮引数と実引数
前回のサンプルの、関数呼び出し部の「"Tomato", "Carrot", "Onion"」と、定義された関数の「 実引数の省略と仮引数のデフォルト値「仮引数と実引数の数は一致していなければいけません」と書きましたが、実際はそうでなくてもいい場合もあります。要するに、実引数を省略する事が可能な場合もあるのです。これを踏まえて、以下のサンプルと結果をご覧下さい。
Apple Carrot Onion Juice!!!(1) Apple Carrot Onion Juice!!!(2) Apple Carrot Onion Juice!!!(3) Apple Carrot Onion Juice!!!(4) Apple Carrot Onion Juice!!!(5) 今回のサンプルでは、仮引数が3つなのに、実引数は1つしかありません。が、ちゃんと機能しています。
そしてサンプルコードを見ると、仮引数に、「 サンプルの結果を見ると、前回の結果と比較して「Tomato」が「Apple」になっているのが判ります。これは、唯一、第一引数(1つ目の引数)が指定されたためです。 しかし、デフォルト値の設定にはルールがあります。次のサンプルをご覧下さい。
このサンプルでは、仮引数の第一引数のみにデフォルト値を設定しています。はてさて、この関数を呼び出す時、どのように呼び出すのでしょうか?第二引数と第三引数は省略できないので指定しなければいけませんが、第二引数、第三引数は、それぞれ2番目、3番目になければいけないので、当然第一引数も指定しなければいけなくなります。という事は、サンプルのデフォルト値は全くの無意味になってしまいます。この書き方でエラーになるわけではありませんが、無意味という点で、間違った書き方です。 そんな訳で、仮引数の一部にデフォルト値を設定したい場合は、デフォルト値を設定した変数を右側に寄せる必要があります。以下にサンプル。
返り値
「・・・。アレェ!?「関数が果たすべき最も重要な役目は与えられた値を加工して返すだ」なんて言ってたけどよ、「返す」って何なんだ?オイ!コノ野郎!「返す」って何を返してんだか解かんねーよ!」 「関数が果たすべき最も重要な役目は与えられた値を加工して返すです」と書いていましたが、残念ながら、前回までのサンプルでは、関数は何も返していません。では、以下の、何かを「返す」サンプルと結果をご覧下さい。
Tomato Carrot Onion Juice!!!(1) Tomato Carrot Onion Juice!!!(2) Tomato Carrot Onion Juice!!!(3) Tomato Carrot Onion Juice!!!(4) Tomato Carrot Onion Juice!!!(5)
今回のサンプルには、新たに「
まず、関数定義内の「 この、「返す」という言葉の意味ですが、これは、「関数を呼び出した部分に値を返す」という意味です。「それではスタジオにお返ししまーす」みたいなイメージです。よって、関数呼び出し部分の「$juice = juice("Tomato", "Carrot", "Onion");」は、「$juice = Tomato Carrot Onion Juice!!!(n);(「n」は関数が呼び出された回数)」と同じ意味になります。 そして、この、返って来る値の事を「返り値(「戻り値」、「リターン値」とも言う)」と言います。また、関数が返す値は「関数値」と言います。 なお、この「関数値」には、処理した結果だけではなく、処理に成功したか、何らかの理由で処理に失敗したかを表す真偽値を指定し、例えば「if文」の条件式に使えば、コールした関数の処理が成功したか否かによって、処理を分岐させるという事も出来ます。 ローカル変数がローカルスコープな わけ「変数」のページで、「変数には定義された場所によって参照範囲が制限される」と書きましたが、参照出来ないという事は、関数内と関数外で同じ名前の変数を定義しても、それらは別の変数として扱われる事を意味します。これにより、グローバル変数に名前を付ける時に、関数内で使われている変数の名前を気にする必要がなくなるわけです。 可変関数変数に可変変数があるように、関数にも「可変関数」なるものがあります。これの書き方のサンプルを以下に。
結果やいかに。 HODENASU!! 結果から、「関数hode()」が実行されているのが判ります。
で、呼び出し部分を見てみると・・・、何か変です。変数の後ろに「
解説すると、「変数$kahen」には文字列の「"hode"」が格納されていて、この「"hode"」の後ろに「 ユーザー定義関数と内部(ビルトイン)関数「ユーザー定義関数」とは、今まで書いてきた「juice()」や「hode()」などの関数の事です。要するに、スクリプト作成者が自分で定義した関数の事です。これに対して、既に何度か書きましたが、PHP側で既に定義されている1000以上の関数の事を、「内部(ビルトイン)関数」と言います。以下に、内部(ビルトイン)関数のサンプルと結果を。
2004/05/16
今回のサンプルでは、2つの内部(ビルトイン)関数を使用しています。「
「 おさらいと予告以上で関数の解説は終わりです。 関数とは
男に二言は、無ぇ。次回は、関数同様、一度定義したら再定義は出来ない「定数」について解説します。 作成日:2004年05月14日 最終更新日:2004年05月20日
【通常モード で表示】
|