PHP 速習チュートリアル

PHP 関数

1. PHP 組み込み関数 (Built-in Functions)

PHP には 1,000 以上の組み込み関数(Built-in Functions)が用意されており、特定のタスクを実行するためにスクリプト内から直接呼び出すことができます。詳細については、PHP リファレンスを参照してください。

2. PHP ユーザー定義関数 (User Defined Functions)

組み込み関数だけでなく、独自の関数を作成することも可能です。

  • 関数とは、プログラム内で繰り返し使用できるステートメントのブロックです。
  • ページがロードされたときに自動的に実行されることはありません。
  • 関数は呼び出されたときにのみ実行されます。

3. 関数の作成 (Create a Function)

ユーザー定義関数の宣言は、キーワード function で始まり、その後に関数の名前が続きます。
開き波括弧 { は関数コードの開始を示し、閉じ波括弧 } は終了を示します。

       注意: 関数名は大文字と小文字を区別しません(Case-insensitive)。また、関数名は文字またはアンダースコア(_)で始まる必要があります。

3.1 シンタックス (Syntax)

function functionName($parameter1, $parameter2) {
  // 実行されるコード
  return $value; // オプション(任意)
}

3.2 実装例

以下は myMessage() という名前の関数を作成する例です:

function myMessage() {
  echo "こんにちは、世界!"; // Hello world!
}

Tip: 関数名には、その関数が何をするのかを反映した名前を付けるようにしましょう!

4. 関数の呼び出し (Call a Function)

関数を呼び出すには、関数名の後に括弧 () を記述します。

4.1 例:myMessage() の呼び出し

function myMessage() {
  echo "こんにちは、世界!";
}

myMessage(); // 関数を呼び出す

5. 関数のパラメーター (Function Parameters)

パラメーター(Parameters)を通じて、関数に情報を渡すことができます。パラメーターは変数と同じように機能します。
パラメーターは関数名の後の括弧内に指定します。カンマで区切ることで、必要な数だけパラメーターを追加できます。

5.1 例:1つのパラメーターを持つ関数

以下の例では、1 つのパラメーター $fname を持つ関数があります。familyName() が呼び出される際、名前(例: "Jani")を渡し、それが関数内部で使用されます。

function familyName($fname) {
  echo "$fname Refsnes.<br>";
}

familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai Jim");
familyName("Borge");

5.2 例:2つのパラメーターを持つ関数

function familyName($fname, $year) {
  echo "$fname Refsnes. $year 年生まれ。<br>";
}

familyName("Hege", "1975");
familyName("Stale", "1978");
familyName("Kai Jim", "1983");

6. デフォルトパラメーター値

デフォルトパラメーターを使用する方法を以下に示します。
パラメーターなしで setHeight() を呼び出すと、デフォルト値が使用されます。

6.1 例

function setHeight($height = 50) {
  echo "高さは : $height <br>";
}

setHeight(350);
setHeight(); // デフォルト値の 50 が使用されます
setHeight(135);

7. 戻り値 (Returning values)

return ステートメントは、関数の実行を直ちに終了し、その関数を呼び出した行に値を返します。

7.1 例

function sum($x, $y) {
  $z = $x + $y;
  return $z;
}

echo "5 + 10 = " . sum(5, 10) . "<br>";
echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);

8. 引数の参照渡し

通常、引数は値渡し(Pass by value)されます。これは、関数内で値のコピーが使用され、関数に渡された元の変数は変更できないことを意味します。

引数を参照渡し(Pass by reference)すると、引数への変更が渡された元の変数にも反映されます。引数を参照にするには、パラメーター名の前に & オペレーターを使用します。

8.1 例

参照渡しの引数を使用して変数を更新します:

function add_five(&$value) {
  $value += 5;
}

$num = 2;
add_five($num);
echo $num; // 出力: 7

9. 可変長引数

パラメーターの前に ... オペレーターを使用することで、関数は不明な数の引数を受け取ることができます。これは可変長引数関数(Variadic Function)とも呼ばれます。渡された引数は配列として扱われます。

9.1 例

引数の数が決まっていない関数:

function sumMyNumbers(...$x) {
  $n = 0;
  $len = count($x);
  for($i = 0; $i < $len; $i++) {
    $n += $x[$i];
  }
  return $n;
}

$a = sumMyNumbers(5, 2, 6, 2, 7, 7);
echo $a;

可変長引数は 1 つしか持てず、必ず最後の引数である必要があります。

9.2 例:可変長引数を最後に配置する場合

function myFamily($lastname, ...$firstname) {
  $txt = "";
  $len = count($firstname);
  for($i = 0; $i < $len; $i++) {
    $txt = $txt."こんにちは、 $firstname[$i] $lastname さん。<br>";
  }
  return $txt;
}

$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;

9.3 例:エラーになるケース(可変長引数が最初にある場合)

// ...演算子を 2 つの引数の最初に置くと、エラーが発生します
function myFamily(...$firstname, $lastname) {
  // エラーが発生
}

10. PHP の型システムと厳格モード (Strict Mode)

PHP は動的型付け言語(Loosely Typed Language)です。
変数にデータ型を明示する必要はなく、値に応じて自動的に型が関連付けられます。そのため、整数に文字列を加算してもエラーにならない場合があります。

PHP 7 からは型宣言(Type Declarations)が追加されました。これにより、関数宣言時に期待されるデータ型を指定できるようになり、strict 宣言を有効にすることで、型が一致しない場合に「Fatal Error」をスローさせることができます。

strict モードを指定するには、declare(strict_types=1); を設定します。これは PHP ファイルの一番最初の行に記述する必要があります。

10.1 例

数値と文字列の両方を関数に送りますが、strict 宣言を追加している例:

<?php declare(strict_types=1); // 厳格な型の要求

function addNumbers(int $a, int $b) {
  return $a + $b;
}

echo addNumbers(5, "5 days"); 
// "5 days" は整数ではないため、エラーがスローされます
?>

strict 宣言を使用することで、意図した通りの型利用を強制できます。

11. 戻り値の型宣言 (Return Type Declarations)

PHP は return ステートメントに対する型宣言もサポートしています。
戻り値の型を宣言するには、関数を宣言する際に、開き波括弧 { の直前にコロン : とデータ型を追加します。

11.1 例:戻り値の型(float)を指定

<?php declare(strict_types=1);

function addNumbers(float $a, float $b) : float {
  return $a + $b;
}

echo addNumbers(1.2, 5.2);
?>

引数の型とは異なる戻り値の型を指定することも可能ですが、返される値が正しい型であることを確認してください。

11.2 例:計算結果を int 型として返す

<?php declare(strict_types=1);

function addNumbers(float $a, float $b) : int {
  return (int)($a + $b); // キャストして int として返す
}

echo addNumbers(1.2, 5.2);
?>