忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

【PHP】関数の引数に複数のデフォルト値を設定した場合の注意点について

PHP では引数を複数持つユーザー関数の定義は以下の様になります。

<?php
// 一般的な引数が3個ある関数
function func1($P1, $P2, $P3) {
    // 引数を単に文字列化して連結
    return "" . $P1 . $P2 . $P3;
}

echo "func1:" . func1("1", "22", "333");
// 表示結果 ⇒ func1:122333
?>


関数自体は特に意味がある内容ではありませんが、引数を文字列として連結して返します。

ここでこの第2引数以降をデフォルト値を持つ様にします。 デフォルト設定は、引数の右側にイコール文字を置き、その後にデフォルト値を書きます。 (第2引数以降は全てデフォルト値を持つ必要があります。)


<?php
// 2個の引数がデフォルト値がある関数
function func1($P1, $P2 = "AA", $P3 = "BBB") {
    // 引数を単に文字列化して連結
    return "" . $P1 . $P2 . $P3;
}

echo "func1:" . func1("1");
// 表示結果 ⇒ func1:1AABBB
?>


結果表示をコメントで記していますが、デフォルト値が表示されるはずです。

もし、第2引数のみデフォルト値としたい場合に以下の様にしたのですが、PHPのエラーが発生しました。

<?php
// 2個の引数がデフォルト値がある関数
function func1($P1, $P2 = "AA", $P3 = "BBB") {
    // 引数を単に文字列化して連結
    return "" . $P1 . $P2 . $P3;
}

echo "func1:" . func1("1",  , "CCC");
?>


"func1:1AACCC"の表示を期待したのですが、以下のエラーが発生しました。 第2引数を省略する場合は、第3引数も省略が必要な様です。

Parse error: syntax error, unexpected ',' in ******/test-func.php on line 8


そこで第2、第3引数に NULL が指定された場合にはデフォルト値を設定する様にしてみました。 (これだと普通の関数になってしまいました)

<?php
// 2個の引数がデフォルト値がある関数
function func1($P1, $P2 = "AA", $P3 = "BBB") {
    if (empty($P2)) {
        $P2 = "AA";
    }
    if (empty($P3)) {
        $P3 = "BBB";
    }
    // 引数を単に文字列化して連結
    return "" . $P1 . $P2 . $P3;
}

echo "func1:" . func1("1") . "<br />";
echo "func1:" . func1("1", NULL, "CCC") . "<br />";
echo "func1:" . func1("1", "222") . "<br />";
// 表示結果 
// func1:1AABBB
// func1:1AACCC
// func1:1222BBB
?>











PR

コメント

コメントを書く