PHP では、関数パラメータをさまざまな方法で定義して渡すことができます。一般的な転送方法には、値渡し、参照渡し、およびデフォルトのパラメータ値の設定が含まれます。転送方法が異なると、関数の内部と外部の変数に異なる影響を及ぼします。
値による受け渡しは、PHP のデフォルトのパラメーター受け渡し方法です。この場合、関数はパラメーター値のコピーを受け取るため、関数内のパラメーターを変更しても元の変数には影響しません。
function sum($a, $b) {
$a += $b;
}
この例では、 $a を変更しても、関数の外部の変数の値は変更されません。
関数内で外部変数の値を直接変更できるようにしたい場合は、参照渡しを使用できます。パラメータを定義するときは、変数名の前に記号& を追加します。
function increment(&$a) {
$a++;
}
このようにして、渡された変数が関数内で変更された後、その値は関数の外部に直接反映されます。
PHP では関数パラメータのデフォルト値を設定できます。関数呼び出し時に対応するパラメータが渡されない場合、システムは自動的にデフォルト値を使用します。
function greet($name = "World") {
echo "Hello, $name!";
}
greet()を実行すると「Hello,World!」となります。が出力されます。 greet("Alice")が実行されると、「こんにちは、アリス!」が出力されます。
PHP 7 以降では、関数パラメーターの型を宣言して、受信パラメーターのデータ型を制限できるようになりました。一般的なタイプは次のとおりです。
function formatDate(DateTime $date) {
// 右 DateTime 右象进行操作
}
function avg(int $a, int $b): float {
return ($a + $b) / 2;
}
上記のコードでは、 formatDate()関数はパラメーターがDateTime型である必要があるのに対し、 avg()関数はパラメーターを整数型に制限し、戻り値は浮動小数点数です。
function doubleValue($value) {
$value *= 2;
}
$x = 10;
doubleValue($x); // $x 変わらない,値渡しなので
echo $x; // 出力 10
function doubleValueByRef(&$value) {
$value *= 2;
}
doubleValueByRef($x); // $x 変更されます,参照渡しなので
echo $x; // 出力 20
上記の比較から、参照渡しにより関数が外部変数を直接変更できるようになり、変数のステータスを同期的に更新する必要があるシナリオに非常に適していることがわかります。
PHP 関数のパラメーター受け渡しメソッドと型宣言メカニズムは、開発者に柔軟で強力な関数定義機能を提供します。値渡し、参照渡し、型宣言を適切に使用すると、コードの保守性が向上するだけでなく、実行時エラーが減少し、コード全体の品質も向上します。