2016-08-12 6 views
2

このコードには3つのvar_dumpsがあります(2番目はコメント化されています)。
これを実行すると、最初と3番目のvar_dumpが予期したとおりに通知(両方)を生成します。
2番目のvar_dumpのコメントを外した後、3番目のvar_dumpが通知をスローしなくなります。
私の質問は:なぜですか?
私はまだ3番目のvar_dumpにまだ私は(issetが示すように)設定されていない変数を読み込んでいるので、そこに通知があると思います。未設定の変数を呼び出しても、参照として呼び出した後で通知を送信しません。

<?php 

function nvl(&$var, $default = 'hello') 
{ 
    return !isset($var) ? $default : $var; 
} 

var_dump($a, isset($a)); 
//var_dump(nvl($a), isset($a)); 
var_dump($a, isset($a)); 
+0

この行 'var_dump(nvl($ a)、isset($ a));'がコメント化されていない場合、$ aが作成されるので –

+3

関数を呼び出して変数を参照で渡すので、http ://php.net/manual/en/language.references.whatdo.php – Rizier123

+0

いいえ、$ aは作成されません。 $ aが設定されていれば、nvl($ a)の後に尋ねるたびに、答えはノーです。それは良いことです、それはその機能のポイントではないからです。 –

答えて

0

becouse基準$aが作成されるnvlに渡すことができるようにします。

あなたが最初にnvlから&を削除すると、3つの通知が表示されます。

+0

はい、それはlogicaIと思われますが、それでも私には完全にはっきりしません。 issetが設定されているかどうかをチェックします。設定されていないので、issetはfalseを返します。これは問題ありません。 定義されていないため、通知がスローされます。これを参照する前に、>通知がスローされません。はい。 これを参照すると、注意が表示されなくなるので、参照$ aが作成されます。つまり、これは今定義されていますか? 参照が作成されているということは、それも同様に定義されていることを意味しますか? –

+1

@AstigNaGahumコメントのRizerによって与えられたperfetcリンク、それのために行くとあなたはPHPの変数を宣言する必要がないので、ぼんやりした画像 –

+0

を得るでしょう。 ' var_dump($ a、isset($ a)); $ a = 1; '$ aはあなたのために同じように作成されます – cske

関連する問題