PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのユーザー定義関数を完全解説!基本構文から引数・戻り値・再帰関数まで

はじめに

PHPには、数学関数、文字列操作関数、日付関数、配列関数など、非常に多くの組み込み関数が用意されています。しかし、開発者自身が特定の要件に合わせて独自の関数を定義することも可能です。このように自分で作成する関数を「ユーザー定義関数」と呼びます。

関数とは、特定のタスクを実行するためにまとめられた、再利用可能な処理ブロックのことです。関数は function キーワードを使って定義し、名前は英字またはアンダースコア(_)で始まる必要があります。一度定義した関数は、プログラム内のどこからでも何度でも呼び出すことができます。

基本的な構文

// 関数を定義する
function myfunction($arg1, $arg2, ... $argn)
{
    statement1;
    statement2;
    ..
    ..
    return $val;
}
// 関数を呼び出す
$ret = myfunction($arg1, $arg2, ... $argn);

関数には省略可能な形で、任意の数の引数を持たせることができます。ただし、呼び出し時には同じ数の引数を渡す必要があります。関数の本体には、条件分岐やループなど、有効なPHPのコードであれば何でも記述できます(他の関数やクラスを関数の中に定義することも可能です)。関数ブロック内の文を実行した後は、最後の文が return であってもなくても、プログラムの制御は呼び出し元の場所へ戻ります。return 文の後に式を記述すると、その値が呼び出し元の環境に返されます。

ユーザー定義関数の基本例

以下の例では、ユーザー定義関数 sayHello() の定義と呼び出しを示しています。

サンプルコード

<?php
// 関数の定義
function sayHello(){
    echo "Hello World!";
}
// 関数の呼び出し
sayHello();
?>

このスクリプトをコマンドラインから実行すると、次の結果が出力されます。

実行結果

Hello World!

引数を持つ関数

次の例では、仮引数を2つ持つ関数を定義しています。

サンプルコード

<?php
function add($arg1, $arg2){
    echo $arg1 + $arg2 . "\n";
}
add(10, 20);
add("Hello", "World");
?>

実行結果

30
PHP Warning: A non-numeric value encountered in line 3

2回目の呼び出しでは、文字列を2つの引数として渡しています。PHPでは文字列に対して + 演算子を使用できないため、警告が発生します。

戻り値を返す関数

次の例のユーザー定義関数は、渡された引数を処理し、その結果を呼び出し元の環境へ返します。

サンプルコード

<?php
function add($arg1, $arg2){
    return $arg1 + $arg2;
}
$val = add(10, 20);
echo "addition:" . $val . "\n";
$val = add("10", "20");
echo "addition: $val";
?>

実行結果

addition:30
addition:30

2回目の呼び出しでは、引数が文字列であっても、PHPが自動的に整数型へ変換して加算処理を行います。これを「型の自動変換」と呼びます。

デフォルト引数値を持つ関数

関数を定義する際に、引数にデフォルト値を設定することができます。関数呼び出し時にその引数へ値が渡されなかった場合、関数内部の処理ではこのデフォルト値が使用されます。以下の例では、デフォルト値を持つ引数を含む関数を定義しています。

サンプルコード

<?php
function welcome($user = "Guest"){
    echo "Hello $user\n";
}
// デフォルト値を上書き
welcome("admin");
// デフォルト値を使用
welcome();
?>

実行結果

Hello admin
Hello Guest

2回目の呼び出しでは、値を渡さずに関数を呼び出しています。この場合、$user 引数はデフォルト値を採用します。

可変長引数を受け取る関数

可変個の引数を受け取れるように関数を定義することもできます。その場合、関数定義内の仮引数名の前に...(スプレッド演算子)トークンを付けます。次の例では、引数として渡された数値リストを合計する add() 関数を示しています。

サンプルコード

<?php
function add(...$numbers){
    $ttl = 0;
    foreach ($numbers as $num){
        $ttl = $ttl + $num;
    }
    return $ttl;
}
$total = add(10, 15, 20);
echo "total= $total\n";
echo "total=" . add(1, 2, 3, 4, 5) . "\n";
?>

実行結果

total= 45
total=15

また、func_get_args() 関数を使うことで、関数に渡された引数のリストを取得することもできます。この方法では、PHPのループを使って渡された引数リストの各値を順番に処理できます。この場合、関数定義には仮引数を記述しません。

サンプルコード

<?php
function add(){
    $numbers = func_get_args();
    $ttl = 0;
    foreach ($numbers as $num){
        $ttl = $ttl + $num;
    }
    return $ttl;
}
$total = add(10, 15, 20);
echo "total= $total\n";
echo "total=" . add(1, 2, 3, 4, 5) . "\n";
?>

実行結果

total= 45
total=15

関数の中に関数を定義する

ある関数の本体ブロックの中に、別の関数を定義することも可能です。ただし、外側の関数が呼び出される前に、内側の関数を呼び出すことはできません。

サンプルコード

<?php
function hello(){
    echo "Hello\n";
    function welcome(){
        echo "Welcome to TutorialsPoint\n";
    }
}
//welcome();  ← ここでコメントを外すとエラーになる
hello();
welcome();
?>

hello() を呼び出す前に welcome() を呼び出すためにコメントを解除すると、次のエラーメッセージが表示され、プログラムが停止します。

Fatal error: Uncaught Error: Call to undefined function welcome()

正常な実行結果

コメントしたまま再度実行すると、次の出力が得られます。

Hello
Welcome to TutorialsPoint

再帰関数

自分自身を呼び出す関数は「再帰関数」と呼ばれます。条件なしに自分自身を呼び続けると無限ループが発生し、スタックがいっぱいになってメモリ不足エラーとなります。次のプログラムでは、factorial() 関数を再帰的に呼び出して階乗を計算しています。

サンプルコード

<?php
function factorial($n){
    if ($n < 2) {
        return 1;
    } else {
        return ($n * factorial($n-1));
    }
}
echo "factorial(5) = " . factorial(5);
?>

実行結果

factorial(5) = 120

まとめ

PHPのユーザー定義関数を使いこなすことで、コードの再利用性と保守性が大幅に向上します。本記事では、基本構文、引数の使い方、戻り値、デフォルト引数、可変長引数、ネストした関数、そして再帰関数まで幅広く解説しました。特に再帰関数を利用する際は、必ず終了条件を設けて無限ループを防ぐことが重要です。これらの知識を活かして、効率的で読みやすいPHPコードを書いてみましょう。

  1. PHPのmax()関数とは?配列・複数の値から最大値を取得する方法を解説

    max()関数の定義と用途PHPのmax()関数は、配列の中から最も大きい要素、または2つ以上のカンマ区切りの引数の中から最大の値を返す組み込み関数です。数値だけでなく文字列の比較にも対応しており、さまざまな場面で活用できます。構文配列を引数として渡す場合:max ( array $values ) : mixedまたは複数の値を直接渡す場合:max ( mixed $value1 [, mixed $... ] ) : mixedパラメータNo.パラメータと説明1values引数が1つだけ指定された場合は、同じ型または異なる型の値を含む配列を渡す必要があります。2value1, value2

  2. PHPのlog10()関数とは?常用対数の計算方法と具体例をわかりやすく解説

    定義と使用方法log10() 関数は、数値の常用対数(底が10の対数)を計算するための関数です。常用対数は「10を底とする対数」とも呼ばれ、log10x を求める際に使用されます。自然対数との間には、次のような関係式が成り立ちます。log10x = logex / loge10この式に基づけば、たとえば次のように計算できます。log10100 = loge100 / loge10 = 2PHPでは、この常用対数の計算を log10() 関数が担っています。構文log10 ( float $arg ) : floatパラメータ番号パラメータと説明1arg常用対数(底10の対数)を計算したい数値を