引数の指定
そふぃのPHP入門 >> PHP言語リファレンス >> ユーザ定義関数 >> 引数の指定

引数の指定

引数とは

引数とは関数に渡す値の事です。分かりにくいかもしれませんが、よーは「関数に処理させる値」という事になります。ユーザ定義関数でも引数を使えますが、その場合は引数を関数に渡してその引数に特定の処理(関数内で指定する)を加える事が多いです。具体的には関数の括弧「()」内に入れる値の事を指します。

例えばprint_r()関数で配列情報出力のページでもprint_r()関数を使用しましたが、print_r()関数を使うと配列などを見やすく表示してくれます。print_r()関数の括弧「()」内に指定する値の事を引数といいます。print_r()関数で引数に配列を指定した場合、「配列情報を見やすいように整形して表示する」というのが関数の動作(処理内容)です。

参考関数

  • print_r() ---- 指定した式に関する情報を解りやすく出力する

書式

  • bool print_r( mixed expression [, bool return ] )
  1. <?php
  2. $arr = array( "a", "b", "c" );
  3. echo "<pre>"; //整形は半角スペースや改行で行われるため<pre>タグ付で出力
  4. print_r( $arr ); //print_rの引数は$arr
  5. echo "</pre>";
  6. ?>

出力結果

Array
(
    [0] => a
    [1] => b
    [2] => c
)

作成した$arr(配列型)の内容を分かりやすく出力します。

ここでは「見やすいように整形して表示する」という処理を$arrに対して行っています。print_r()関数が処理を行う関数ですが、処理させたい値は$arrのように括弧「()」の中に入れて引数として渡します。

引数付きのユーザ定義関数

前のページのユーザ定義関数で作成した関数は、引数付きの関数ではなくすでに処理する値が決められていて引数無しで呼び出すだけで特定の動作をするような関数でした。

実際にプログラムを作成していると、そのような関数よりは引数で関数内に値を渡す事のできる関数の方が多く使うと思いますが、PHPのユーザ定義関数では引数をつけた関数も作成できます。ユーザ定義関数でもユーザ定義関数の定義方法は紹介しましたが、もう一度載せておきます。

  1. function 関数名 ( 引数 ){
  2.   処理;
  3. }

この「引数」の部分に値を記述し、その値を関数内で処理するように作成するだけです。

先ほどのprint_r()関数をいつでも<pre>タグ付きで出力してくれる関数を作ります。この関数を共通ファイルなどに置いておくと配列情報を表示させたい場合にいちいち<pre>で囲む必要がなくなるため、非常に便利です。

  1. <?php
  2.  function my_print_r( $var ){ //関数の作成:引数を指定
  3.   echo "<pre>";
  4.   print_r( $var ); //渡された引数を処理
  5.   echo "</pre>";
  6. };
  7.  
  8. $name = array("sophy","nancy","angera");
  9.  
  10. my_print_r($name);
  11. ?>

出力結果

Array
(
    [0] => sophy
    [1] => nancy
    [2] => angera
)

上で作った関数は、引数($var)を<pre>タグで囲ったprint_r()関数に渡します。print_r()関数と動作は変わりませんが、常に<pre>タグをつけて出力してくれるところが異なります。

引数のデフォルト値

エラー構文

引数付きの関数を作成し、関数内でその引数を処理させた場合、引数なしでその関数を参照するとエラーが出ます。

Warning: Missing argument 1 for 関数名() in (ファイルパスとエラー行数)

以下の構文はエラーが出ます。関数内で引数を処理していますが、関数参照時には引数を指定していないのが原因です。

PHPエラー構文

  1. <?php
  2. function somefunc($aaa){
  3.   echo $aaa;
  4. };
  5. somefunc();
  6. ?>

上記サンプルだと「引数がねーよっ!!」ってPHP君に怒られちゃうわけですねw

引数のデフォルト値指定方法

上記のように、引数を関数内で処理させている関数では参照時に引数を指定しないとエラーとなってしまいますが、引数にはデフォルト値を設定する事ができます。

引数にデフォルト値を指定すると、関数参照時に引数の指定をしなかった場合はそのデフォルト値が適用されます。つまりは引数を指定し忘れて参照しちゃっても勝手に使ってくれる値(デフォルト値)があるのでエラーも出ない、という訳ですww。

だからといって、このデフォルト引数はエラー回避のためだけに記述するんじゃありませんww。ほんの一例ですが、関数内で条件分岐を作って「デフォルト(通常)の処理はこーだけど特別の指定をした場合はあーする」のようにプログラムを組むことができますので便利です。

引数のデフォルト値を指定するには、引数を記述する時にデフォルト値を代入しておくだけです。

  1. function foo( 引数名 = デフォルト引数値 ){
  2.   処理;
  3. };

実際にサンプルを載せておきます。引数がなければ勝手に「コーヒー」という値を代入して実行する関数です。

  1. <?php
  2. function order( $drink = "コーヒー" ){
  3.   echo "ご注文は".$drink."です。<br />\n";
  4. };
  5. order();
  6. order("紅茶");
  7. ?>

出力結果

ご注文はコーヒーです。
ご注文は紅茶です。

あんまり実用的なサンプルじゃありませんが・・・・お客さんが何も言わなかったら勝手にコーヒーを出す喫茶店みたいなもんですかね(笑)。

引数指定の順番

今までのサンプルでは引数を1つだけしか指定していませんでしたが、実は引数は複数指定することができます。

その際に注意したいのはデフォルト値の指定がない引数をデフォルト引数の後ろ(右側)におく事ができない、という事です。

例えば、以下のようなサンプルではエラーが出ます。

PHPエラー構文エラーが出る構文

  1. <?php
  2. function orders( $drink="コーヒー", $num ){
  3.   echo "ご注文は".$drink."".$num."杯です。<br />\n";
  4. };
  5. //第2引数の$numの分の引数のみ指定したつもり
  6. orders(2);
  7. ?>

これは「2」を第1引数の$drinkに引き換えてしまい、第2引数の$numが指定されていない状態になるからです。

上記のような構文を正しく書くためには以下のサンプルのように引数を入れ替えて指定します。

  1. <?php
  2. function orders( $num, $drink="コーヒー" ){
  3.   echo "ご注文は".$drink."".$num."杯です。<br />\n";
  4. };
  5.  
  6. orders(2); //第2引数にはデフォルト値が適用される。
  7. ?>

出力結果

ご注文はコーヒーを2杯です。

このように、デフォルト値を取らない引数がある場合は常にデフォルト値を取る引数より前に記述します。

引数の数を使うときによって可変にしたい場合は可変長の引数をご覧下さい。ちなみに、可変長の引数をとる事ができるのはPHP4からです。PHP3では決まった数の引数しか取ることができません。