-3

私は機能を持っています。それは問題なく何度も再利用されます。しかし、今は関数を呼び出すことができません。これが私の機能です

function a($a,&$b){
        // functions code here
        }

このように関数を呼び出します。

a(3,null);

私のコードのエラーは何ですか?

4

3 に答える 3

2

あなたは参照によって渡そうとし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まだ参照で渡すことができないためです。ただし、エラーなしで最初のエコーを使用できます。

于 2012-08-30T09:01:26.750 に答える
2

次の行に沿ってエラーメッセージが表示されることがわかります。

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);
于 2012-08-30T09:04:27.347 に答える
-1

そのはず :

 function a($a,$b=false){
        // functions code here
    }
于 2012-08-30T09:01:14.343 に答える