私は機能を持っています。それは問題なく何度も再利用されます。しかし、今は関数を呼び出すことができません。これが私の機能です
function a($a,&$b){
// functions code here
}
このように関数を呼び出します。
a(3,null);
私のコードのエラーは何ですか?
私は機能を持っています。それは問題なく何度も再利用されます。しかし、今は関数を呼び出すことができません。これが私の機能です
function a($a,&$b){
// functions code here
}
このように関数を呼び出します。
a(3,null);
私のコードのエラーは何ですか?
あなたは参照によって渡そうとしnull
ています。
function a($a,&$b){
// functions code here
}
a(3,$otherVar);
// A copy of 3 is sent to the function.
// $otherVar is actually passed to the function
あなたはピンチでこのようなものを使うこともできます:
$null = 0; // Throwaway variable
a($a, $null);
しかし、参照で渡す場合、なぜそれをnullに送信したいのですか?確かに、2番目の変数の内容を変更するコードのビットは目的のためにこれを行いますか?
ちなみに、あなたがしていることは、関数のオーバーロードを使用したいというほぼ完璧な例です。PHPがこれをサポートしていないのは残念です。
検討したい別のアイデア-次のようなパラメーターとして配列を渡します。
$myVars=array( 'first' => $a, 'second' => $otherVar);
a($myVars);
必要な数のアイテムを渡すことができ、参照によるパスとして保持することもできますが、変数を直接変更するのではなく、配列を変更することになります。関数では、を変更しないことを選択しfirst
、必要に応じてsecond
(存在する場合)を実行することができます。
オプションのパラメータを使用できますが、思ったほど直感的ではなく、指定した例では機能しません。
function makecoffee($var, &$type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee(1);
echo makecoffee(1,null);
出力:
Fatal error: Only variables can be passed by reference in
/var/www/test.php on line 7
これは、null
まだ参照で渡すことができないためです。ただし、エラーなしで最初のエコーを使用できます。
次の行に沿ってエラーメッセージが表示されることがわかります。
PHP Fatal error: Only variables can be passed by reference in SOMETHING.php on line xxx
これは、関数が2番目のパラメーターが参照(つまり&$b
)であると言っており、変数を渡す必要があるためです。あなたは実際にnull
変数ではないものを渡しているので、問題があります。
2番目のパラメーターが参照として必要な場合(そしてこれを修正する1つの方法は、その要件を削除することかもしれません)、nullに設定された変数を渡します。例えば
$c = null;
a(3, $c);
そのはず :
function a($a,$b=false){
// functions code here
}