【PHP】関数から値を受け取る

Image

PHPでは、関数で処理した値を返すことができます。このとき関数が返す値を返り値と言います。関数から返り値を受け取るにはreturn文を使用します。

返り値とは

前回、ユーザー定義関数に対して値を渡す際に引数というものを使用しました。引数は、関数に値を渡してその値を使用して処理を行わせるというものでした。

返り値は、引数とは逆に関数が返す値のことを言います。関数に値を与えて、処理を行い、その値を受け取ることができれば、関数をより便利に使用することできるようになります。

返り値は以下のように指定します。

<?php

function 関数名(引数){

  処理...

  return 返り値;
}

?>

この引数と返り値の関係を例に挙げるとすれば、挨拶がそれに近いでしょうか。

あなたが知人に挨拶をすると、受け取った知人は挨拶を返してくれることでしょう。これは、あなたが発した挨拶に対して、知人は頭の中で色々な処理を行なった後で挨拶を返します。これに近い流れを関数を使って表現できるようになるわけです。

return文

以下はPHPのリファレンスに記載されているreturn文の詳細です。

returnは、プログラムの制御を呼び出し元に戻します。呼び出し側のモジュールでは、呼び出しの次の式から続行します。

関数内で呼び出されると、return文は即座にその関数の実行を停止し、引数を関数の値として返します。returnはまた、eval()文やスクリプト自体の実行を終了させることが出来ます。

グローバルスコープで呼び出されると、現在実行中のスクリプトが終了します。もしそのスクリプトが include もしくは require されたものである場合、制御は呼び出し元のファイルに戻ります。また、そのスクリプトが include されたものである場合は、returnに与えられた引数の値は include の戻り値となります。returnがメインスクリプトで呼び出された場合はスクリプトが終了します。また、設定ファイルの auto_prepend_file 又は auto_append_fileオプションで指定されたスクリプトの場合も同様にそのスクリプトが終了します。

sited from http://php.net/manual/ja/function.return.php

この中で注目して欲しいのは以下の部分です。

関数内で呼び出されると、return文は即座にその関数の実行を停止し、引数を関数の値として返します。

これは、return文の記述箇所で関数の処理を停止して、return文に指定された値を返します、という意味合いです。return文を使う上でとても重要な部分になりますので覚えておいていただければと思います。

では、試しに簡単な挨拶プログラムを書いてみましょう。

<?php

$aisatsu = "こんにちは";
echo get_aisatsu($aisatsu);

function get_aisatsu($value){

  if($value === "おはよう"){
    $result = "おはようございます!";

  }elseif($value === "こんにちは"){
    $result = "こんにちは!";

  }elseif($value === "こんばんは"){
    $result = "こんばんは!";

  }else{
    $result = "返事ができない";
  }
  return $result;

}

?>

上記プログラムは、$aisatsuに代入された値を引数として関数get_aisatsuに与えます。関数get_aisatsuは引数を元に処理をして、対応する値を$resultに代入後、return文で値を返します。上のプログラムを実行すると、こんにちはという文字列が出力されます。

PHPでプログラムを書く上でたくさんの関数を定義することになると思います。関数の基本的な使い方は、引数を与えて処理を行い、返り値を受け取るという流れです。関数から値を受け取る場合はreturn文を使用することだけ覚えておきましょう。

複数の値を返す

定義する関数によっては複数の返り値を受け取りたい場合があると思います。しかし、return文では複数の値を返すことができません。そのため、複数の値を受け取りたい場合は配列を使用します。

<?php

$name_list = get_name_list();

foreach($name_list as $name){
  echo $name."<br />";
}

function get_name_list(){

  $one = "田中一郎";
  $two = "鈴木二郎";
  $three = "佐藤三郎";

  return array($one,$two,$three);

}

?>

配列ですので、返り値も配列のままです。そこだけ注意していただければと思います。

もし、返り値を配列ではなく変数で受け取りたい場合は、PHPで用意されているlistという関数を使用します。list関数は、配列に格納されている値を順番に、複数の変数に代入することができます。

<?php

list($one,$two,$three) = get_name_list();

echo $one."<br />";
echo $two."<br />";
echo $three."<br />";

function get_name_list(){

  $one = "田中一郎";
  $two = "鈴木二郎";
  $three = "佐藤三郎";

  return array($one,$two,$three);

}

?>

SHARE