2012/03/27更新

[PHP] 引数が省略可能な関数定義の方法。JavaとJavaScriptとの比較もしてみました。

このエントリーをはてなブックマークに追加            

今日はPHPを使っていて、ふと引数の省略はPHPでは出来るのかな?と思い、調べてみました。
出来るんですね。便利です。その方法を忘れないように、残しておきたいと思います。

菜の花畑



PHPで引数省略可能な関数を定義する方法

以下のように、関数の引数にあらかじめ値を設定すると、 その値が設定された引数は省略可能となるようです。

<?php

  // 第2引数(toUpperCase)が省略可能な関数
  function getName ($id, $toUpperCase = false) {

    // 引数($id)に合わせて、名前を取得する。
    $name = "";
    switch ($id) {
      case 1:
        $name = "Bob";
        break;
      case 2:
        $name = "Smith";
        break;
      case 3:
        $name = "Androf";
        break;
      default:
        $name = "No Name";
        break;
    }

    // 第2引数でtrueが設定されたら、名前を大文字にする。
    if ($toUpperCase) {
      $name = strtoupper($name);
    }

    return $name;
  }

  echo getName(1) . "\n";  // 引数省略の例
  echo getName(2) . "\n";  // 引数省略の例
  echo getName(3, true) . "\n";  // 引数省略しないの例
?>


PHPの柔軟性をここでも感じました。ゆるーい感じで便利ですねー。



javaとJavaScriptで同様の事をやる場合はこんな感じ

ちなみにJavaとJavaScriptの場合には、以下のような感じに引数省略を実現します。

Javaの場合

いまのところ引数省略は出来ないので、オーバーロードを用いて、引数ありとなしの2つの メソッド(関数)を定義します。
public String getName (int id) {
  this.getName(id, false);
}

public String getName (int id, boolean toUpperCase) {
  // 名前を返す処理を記述する
}

JavaScriptの場合

JavaScriptでは、関数に引数が定義されていても、呼び出し側が引数を指定しない場合には、 その引数はundefinedとなります。
function getName (id, toUpperCase) {
     // 名前を返す処理を記述する
}

// 呼び出し側の例
// 引数を指定しない呼び出し
var name1 = getName (1, true);
// 第2引数(toUpperCase)は、undefinedとなる
var name2 = getName (2); 

言語によって、少しずつ違いがあって面白いですね。
柔軟性でいうと、PHPやJavaScriptがJavaよりあるようです。 柔軟性がある分、意図せぬところでバグッたりするので、大変な面もありますが。




最後に

PHPという言語は、面白いですね。 現在、絶賛利用中で、学び中なので、もっともっと便利な点を学びたいと思います。
次もブログに掲載できれば良いなぁと思います(・∀・)






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。