【PHP入門】戻り値(return文)の基本から参照返し・型宣言まで徹底解説
はじめに
PHPの関数では、処理の最後に return 文を記述できますが、これは必須ではありません。関数が呼び出されると、本体ブロック内の処理が完了した時点で、最後の文が return であるかどうかにかかわらず、プログラムの制御は呼び出し元へ戻ります。return 文がない場合には NULL が返され、return 文に式が指定されていれば、その式の評価結果が返り値となります。なお、関数が直接返せる値は1つだけですが、その値はスカラー型・配列・オブジェクトのいずれでも構いません。返された値は変数に代入して、その後の処理に活用できます。
return文を使った基本的な関数
次の例では、引数として渡された2つの整数の合計を返す関数を定義しています。
コード例
<?php
function add($var1, $var2){
$var3 = $var1 + $var2;
return $var3;
}
$x = 10;
$y = 20;
$z = add($x, $y);
echo "addition=$z";
?>
出力結果
このコードを実行すると、次のように表示されます。
addition=30
配列を返す
関数が直接返せる値は1つだけですが、複数の値を配列に格納して返せば、実質的に複数の結果を受け取ることが可能です。次の例では、2つの数値を関数に渡し、加算・減算・乗算・除算の4つの計算結果を連想配列として返しています。
コード例
<?php
function result($var1, $var2){
$r1 = $var1 + $var2;
$r2 = $var1 - $var2;
$r3 = $var1 * $var2;
$r4 = $var1 / $var2;
return array("add"=>$r1, "sub"=>$r2, "multiply"=>$r3, "division"=>$r4);
}
$x = 10;
$y = 20;
$arr = result($x, $y);
foreach ($arr as $k=>$v){
echo $k . "->" . $v . "\n";
}
?>
出力結果
このコードを実行すると、次のように表示されます。
add->30 sub->-10 multiply->200 division->0.5
参照による値の返却(リファレンス返し)
引数を参照渡しできるのと同様に、関数の戻り値も参照として返すことができます。そのためには、関数名の先頭に & 記号を付けます。さらに、関数を呼び出す側でも & 記号を指定する必要があります。
次の例では、myfunction() の中に静的(static)な配列を保持し、その要素の1つを参照で返して変数に受け取っています。受け取った変数の値を変更した後、同じ関数をもう一度呼び出すと、関数内の配列の値が変更されていることが確認できます。
コード例
<?php
function &myfunction(){
static $arr = [1, 2, 3, 4, 5];
echo "array elements: ";
foreach ($arr as $i){
echo "$i ";
}
echo "\n";
return $arr[2];
}
$var = &myfunction();
echo "returned by reference : $var\n";
$var = 100;
$var = &myfunction();
?>
出力結果
このコードを実行すると、次のように表示されます。
array elements: 1 2 3 4 5 returned by reference : 3 array elements: 1 2 100 4 5
戻り値の型宣言(Return Type Declarations)
PHP 7 以降では、引数に型を宣言できるのと同じように、戻り値に対しても型を指定できます。これにより、関数が期待どおりの型の値を返すことを保証でき、バグの早期発見につながります。
構文
// 戻り値に型を指定した関数の定義
function myfunction($arg1, $arg2): type{
..
..
return $var;
}
戻り値の型として使用できるのは、int や float、string、bool といったすべてのスカラー型に加え、クラス、インターフェイス、array、iterable、object などの標準的なPHPのデータ型です。
コード例
<?php
function add($x, $y): float{
return $x + $y;
}
$var = add(5, 8);
var_dump($var);
?>
出力結果
このコードを実行すると、次のように表示されます。
float(13)
declare 文で strict_types=1 を指定すると、暗黙的な型変換(強制的な型の変換)が行われなくなります。
コード例
<?php
declare(strict_types=1);
function add($x, $y): int{
return $x + $y;
}
$var = add(5.5, 8.8);
var_dump($var);
?>
出力結果
この場合、float 型の値が int 型として宣言された関数に渡されるため、以下のような TypeError(致命的エラー)が発生します。
PHP Fatal error: Uncaught TypeError: Return value of add() must be of the type integer, float returned
まとめ
- return 文は省略可能で、省略した場合は NULL が返される
- 戻り値は1つだけだが、配列を使えば複数の値をまとめて返せる
- 関数名に & を付けると参照による返却(リファレンス返し)が可能になる
- PHP 7 以降は戻り値の型宣言により、意図しない型の返却を防ぐことができる
-
PHPのarray_count_values()関数とは?配列内の値の出現回数を数える方法
PHPのarray_count_values()関数は、配列内に各値が何回出現するかを集計し、その結果を連想配列として返す関数です。返される連想配列では、元の配列の「値」がキーとなり、その値が出現した「回数」が値として格納されます。 基本構文 array_count_values(array $array): array パラメータ array(必須)− 値の出現回数を集計したい対象の配列を指定します。 戻り値 array_count_values()関数は連想配列を返します。この連想配列のキーには元の配列の各値が、値にはそれぞれの出現回数が格納されます。なお、この関数で集計できるのは文字
-
Pythonで関数から複数の値を返す5つの方法【タプル・辞書・クラス・リスト・ジェネレータ】
Pythonの関数は、複数の値を一度に返すことができます。返された値はそのまま変数に格納でき、関数が返せるのは1つの変数だけとは限りません。0個、1個、2個、それ以上の値でも自由に返せます。実は、この「複数の値を返せる」という性質はPythonの標準的な機能です。C++やJavaなど、多くの他のプログラミング言語では利用できない便利な特徴といえます。関数から複数の値を返すには、目的に応じてタプル、リスト、辞書などのオブジェクトを活用します。本記事では、代表的な5つの方法をコード例とともにわかりやすく解説します。方法1:タプル(tuple)を使うdef func(x): y0 = x +