PHP 関数

PHPの真の力は、関数を利用することで発揮されます。

PHPの組み込み関数

PHPには直接呼び出せる1000以上の組み込み関数があります。これらはスクリプト内から特定のタスクを実行するために使用されます。

PHPユーザー定義関数

組み込みのPHP関数に加えて、独自のカスタム関数を作成することが可能です。

関数はプログラム内で繰り返し使用できる一連のステートメントです。

  • ページの読み込み時に関数は自動的に実行されません。
  • 関数はその名前を呼び出すことで実行されます。

関数の作成

ユーザー定義関数の宣言は、キーワードfunctionで始まり、関数の名前が続きます:


function myMessage() {
  echo "Hello world!";
}

注意: 関数名は文字またはアンダースコアで始める必要があります。関数名は大文字小文字を区別しません。

関数の呼び出し

関数を呼び出すには、その名前の後に括弧()を付けて記述します:


function myMessage() {
  echo "Hello world!";
}

myMessage();

この例では、myMessage()という関数を作成しています。

波括弧{は関数コードの開始を示し、閉じ括弧}は関数の終了を示します。

関数は”Hello world!”を出力します。

PHP関数の引数

引数を介して関数に情報を渡すことができます。引数は単なる変数のようなものです。

引数は関数名の後ろに指定され、括弧内に記述されます。複数の引数を追加する場合は、コンマで区切ります。

1つの引数($fname)を持つ関数の例です。familyName()関数が呼び出されるとき、名前(“Jani”)を渡し、その名前が関数内で使用され、いくつかの異なる名前が同じ姓で出力されます:


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

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

2つの引数($fname, $year)を持つ関数の例です:


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

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

PHPのデフォルト引数値

次の例は、デフォルトパラメータを使用する方法を示しています。引数なしでsetHeight()関数を呼び出すと、デフォルト値が引数として使用されます:


function setHeight($minheight = 50) {
  echo "The height is : $minheight <br>";
}

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

PHP関数 – 戻り値の返却

関数が値を返すようにするには、return文を使用します:


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

参照による引数の渡し方

通常、PHPでは引数は値によって渡されます。これは、関数内で使用される値のコピーであり、関数に渡された変数は変更できません。

ある関数の引数が参照によって渡される場合、引数への変更は関数に渡された変数にも影響を与えます。引数を参照に変換するには、&演算子を使用します:


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

$num = 2;
add_five($num);
echo $num;

可変長引数

関数パラメータの前に…演算子を使用することで、関数は事前に引数の数が不明な場合でも柔軟に引数を受け入れることができます。これは可変長関数とも呼ばれます。

可変長関数の引数は配列になります。


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つだけ指定でき、かつそれは最後の引数である必要があります。

例:


function myFamily($lastname, ...$firstname) {
  txt = "";
  $len = count($firstname);
  for($i = 0; $i < $len; $i++) {
    $txt = $txt."Hi, $firstname[$i] $lastname.<br>";
  }
  return $txt;
}

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

もし可変長引数が最後の引数でない場合、エラーが発生します。

PHPは型宣言が必須でない言語

上記の例で注意すべき点は、PHPには変数がどのデータ型であるかを明示する必要がないことです。

PHPはその値に応じて自動的にデータ型を関連付けます。データ型が厳密に設定されていないため、整数に文字列を追加するなどの操作がエラーを引き起こさないことがあります。

PHP 7では、型宣言が追加されました。これにより、関数を宣言する際に期待されるデータ型を指定することができ、厳密な宣言が追加されるとデータ型の不一致が発生すると”致命的エラー”がスローされます。

次の例では、strictを使用せずに数値と文字列を関数に送信し、strict宣言をしていないため、”5 days”はint(5)に変換され、10が返されます。


function addNumbers(int $a, int $b) {
  return $a + $b;
}
echo addNumbers(5, "5 days");

strictを指定するには、最初のPHPファイルの最初の行にdeclare(strict_types=1);を設定する必要があります。

次の例では、数値と文字列を関数に送信しますが、strict宣言を追加しています:


<?php declare(strict_types=1); // strict requirement

function addNumbers(int $a, int $b) {
  return $a + $b;
}
echo addNumbers(5, "5 days");

strict宣言により、意図した方法で使用することが強制されます。

PHPの戻り値型宣言

PHP 7では、戻り値に対する型宣言もサポートされています。関数引数の型宣言と同様に、strict要件を有効にすると、タイプ不一致で”致命的エラー”がスローされます。

関数の宣言時に波括弧{の直前にコロン(:)と型を追加して戻り値の型を指定します。

次の例では、関数の戻り値の型を指定しています:


<?php declare(strict_types=1); // strict requirement
function addNumbers(float $a, float $b) : float {
  return $a + $b;
}
echo addNumbers(1.2, 5.2);

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


<?php declare(strict_types=1); // strict requirement
function addNumbers(float $a, float $b) : int {
  return (int)($a + $b);
}
echo addNumbers(1.2, 5.2);