関数の引数

引数は、既定で値渡しとなります。

値渡し

 

参照渡し (リファレンス渡し)

引数の変数名の前に「&」を付けます。PHP: リファレンスの説明 - Manual

function Foo( &$x )
{
    $x++;
}

$a = 1;
Foo( $a );

echo $a; // 2と出力される

「Call-time pass-by-reference」警告

PHP 5.3.0より前では、

Foo( &$a );

のように関数コール時に参照渡しをすると、

Warning: Call-time pass-by-reference has been deprecated in C:\test.php on line 10

のような警告が表示されます。PHP: リファレンス渡し - Manual

これを回避するには、参照渡しをするかは関数の側で指定するようにします。このことに関してはコア php.ini ディレクティブに関する説明で、次のように解説されています。

関数のコール時に引数が参照で渡された場合に、警告するかどうかを 設定します。この機能は PHP 5.3.0 で非推奨となり、将来のバージョンの PHP/Zend ではサポートされない可能性があります。 推奨される方法は、関数宣言時に参照渡しとするべき引数を指定する ことです。将来のバージョンでの動作を保障するために、この オプションを off とし、スクリプトがこの状態で正しく動作することを 確認することが推奨されます (この機能を使用するたびに警告が発生します)。

関数コール時に参照で引数を渡すことは、コードの明解さを損なうために 廃止されています。関数は、引数が参照渡しであると宣言されて いない場合でも、文書化されていない方法で、その引数を修正できます。 副作用を回避するためには、どの引数を参照渡しとするかを関数宣言でのみ 指定すると良いでしょう。

allow_call_time_pass_reference

PHP 5.4.0ではこの機能が削除されたため、警告ではなく「Fatal error: Call-time pass-by-reference has been removed」として、エラーとなります。

デフォルト引数

C++スタイルのデフォルト引数を使用できます。

可変長引数