Tips

2012.12.18

PHP ユーザ定義関数と引数,入れ子について 【初級編 第37回】

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();
?>

ブラウザ確認画像

新連載はじまりました!新PHP基礎 連載リンク

PHP基礎 連載

Recent News

Recent Tips

Tag Search