FUNCTION

関数は、次のような構文で定義されます。

function foo( $arg_1, $arg_2, ..., $arg_n ) {
   echo "関数の例です。\n";
   return $retval;
}
     

関数の中では、他の関数や クラス 定義 を含む PHP3 のあらゆる有効なコードを使用することができます。

返り値

オプションの return 文により値を返すことができます。 リストやオブジェクトを含むあらゆる型を返すことができます。

function my_sqrt( $num ) {
   return $num * $num;
}
echo my_sqrt( 4 );   // '16' を出力します。
      

複数の値を返すことはできませんが、リストを返すことにより 同じ効果を得ることができます。

function foo() {
   return array( 0, 1, 2 );
}
list( $zero, $one, $two ) = foo();
      

引数

引数のリストにより関数へ情報を渡すことができます。 このリストは、カンマで区切られた変数や定数のリストです。

PHP3 は、値渡し(デフォルト)、 参照渡しデフォルト引数値 をサポートしています。 可変長引数はサポートしていませんが、 配列を渡すことにより、同様の効果が得られます。

参照渡し

デフォルトで、関数の引数は値で渡されます。 関数がその引数を修正できるようにするには、その引数を参照渡しと する必要があります。

関数の引数を常に参照渡しとしたい場合には、関数定義において アンパサンド(&) を引数名の前に付加することができます。

function foo( &$bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo2( $str );
echo $str;    // 'This is a string, and something extra.' を出力します
       

変数へある変数を参照渡しとしたいが、デフォルトでは参照渡しではない 場合、関数コール時に引数名の前にアンパサンドを付加することができます。

function foo( $bar ) {
   $bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo2( $str );
echo $str;    // 'This is a string, ' を出力します
foo2( &$str );
echo $str;    // 'This is a string, and something extra.' を出力します
       

デフォルト値

関数は、スカラー引数に関して次のように C++ スタイルのデフォルト値を 定義することができます。

function makecoffee( $type = "cappucino" ) {
   echo "一杯の $type を作ります\n";
}
echo makecoffee();
echo makecoffee( "espresso" );
       

上のコードにより、次のような出力が行われます。

一杯の cappucino を作ります
一杯の espresso を作ります
      

デフォルト引数の機能を使うとき、全てのデフォルト値は、 デフォルト値としない引数の右側にある必要があります。 そうしないと、期待通りの動作は得られないでしょう。 次の短いコードを見てみましょう。

function makeyogurt( $type = "acidophilus", $flavour ) {
   return "ボール一杯の $type $flavour を作ります。\n";
}
echo makeyogurt( "raspberry" );   // 期待通りには動作しません
       

上記の例の出力は次のようになります。

Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
ボール一杯の raspberry を作ります。
      

ここで、上の例を次のコードと比べてみましょう。

function makeyogurt( $flavour, $type = "acidophilus" ) {
   return "ボール一杯の $type $flavour を作ります。\n";
}
echo makeyogurt( "raspberry" );   // 期待通りに動作します
       

この例の出力は、次のようになります。

ボール一杯の acidophilus raspberry を作ります。