PHP ユーザ定義関数と引数,入れ子
関数
前回は外部ファイルの読み込みかたについて記載しました。
今回は関数について記載したいと思います。
関数について
関数はある処理の内容をまとめたものです。
例えば今までのページで使用していた vartype(変数) も関数の1つです。
PHPであらかじめ vartype に引数(括弧内に入れて関数に渡すもの)に変数を入れて渡すと、
vartype の場合は変数の型が何であるかを返してくれます。
このようにPHPであらかじめ用意されている関数はかなりの数があります。
PHPであらかじめ用意されている関数以外にも自分で定義したり、
プラグインのように関数群を読み込んで使用できるようにしたりすることができます。
関数の例
例えば date 関数を使用すると、そのWebサーバ上で認識されている現在の日付を返してくれます。
以下は現在の日付を単純に表示するだけのものです。
<?php echo date("Y/m/d"); ?>
このように date関数では引数( )内に日付のフォーマットを渡すと、
その形式に合わせて現在の日付を返してくれます。
この場合 Y は Year、m は Month、d は Day になります。
それぞれを / で分ける形式にしていて、それを echo で表示しているだけです。
また date関数ではこの他にもたくさんのフォーマットの指定のしかたがあります。
この際に関数が返してくれる値のことを戻り値や返り値といいます。
この場合は日付が戻り値になります。
ユーザ定義関数
ユーザ定義関数とはPHPにあらかじめ定義されているものではなく、
自分である一定の処理をまとめたものを関数化することで、関数名でその処理を呼び出せるようにしたものです。
ユーザ定義関数の例
ユーザ定義関数は以下のように function から記述します。
function 関数名(){ この関数の処理内容; }
上記で定義した関数を呼び出す場合は以下のように定義します。
関数名();
以下では、ユーザ定義関数 mes を呼び出して echo でメッセージを表示しています。
関数の呼び出しは、関数名(); のようにして記述します。 <?php function mes(){ echo "メッセージを表示します。"; } mes(); ?>
以前は関数の呼び出しが、関数本体の定義の後ろに記述されている必要がありましたが、
現在は以下のように呼び出しが、関数本体の前にあっても問題なく実行できます。
<?php mes(); function mes(){ echo "メッセージを表示します。"; } ?>
引数を渡す場合
関数に引数を渡す場合は以下のようにします。
function 関数名(この関数に渡したい引数){ この関数の処理内容; } 関数名(渡したい引数);
例えば以下では関数 mes に引数を変数に格納して渡して、その引数の内容を表示しています。
<?php function mes($atai){ echo $atai; } $hensuu = "メッセージの内容です。"; mes($hensuu); ?>
このように呼び出し側の mes で引数に与えたものが、本体側の $atai に格納されています。
それを echo に与えて表示しています。
この場合の $ataiの内容はコピーされたものになっています。
関数の呼び出しの注意点
関数が入れ子になっている場合
関数の呼び出しでは以下のように入れ子構造になっている場合は、
呼び出し順序に注意する必要があります。
例えば以下のように test1関数の中に test2関数がある場合は、
呼び出す際に test2関数を先に呼び出しても表示できません。
<?php function test1(){ echo "test1 の処理<br>"; function test2(){ echo "test2 の処理<br>"; } } test2(); test1(); ?>
この場合は以下のように test1関数を呼び出す必要があります。
<?php function test1(){ echo "test1 の処理<br>"; function test2(){ echo "test2 の処理<br>"; } } test1(); test2(); ?>
関数が評価式後の処理の中にある場合
例えば if文で評価した中に関数がある場合は、その評価式の判定にマッチしてからでないと表示できません。
以下では評価式の中にある関数を評価式の前に記述しています。
<?php test(); if(true){ function test(){ echo "メッセージを表示します。"; } } ?>
以下のように評価式でマッチした後に、関数を実行します。
<?php if(true){ function test(){ echo "メッセージを表示します。"; } } test(); ?>
またたとえ評価式の後に記述していても、マッチしていなければ表示できません。
<?php if(2 == 3){ function test(){ echo "メッセージを表示します。"; } } else { echo "失敗"; } test(); ?>
以下のようにすれば test関数が実行できます。
<?php if(2 == 2){ function test(){ echo "メッセージを表示します。"; } } else { echo "失敗"; } test(); ?>