2016-09-19 11 views
1

私はちょうど私のPHPコードでは、次の動作に気づいたと私はそれが起こっているのだろうかと思っています。PHP - 参照渡しで未定義のインデックスエラーを抑制しますか?

$array = array(); 

test_value($array['invalid_index']); // Error -> Notice: Undefined index: invalid_index in ... 
test_reference($array['invalid_index']); //No error 

function test_value($value){} 
function test_reference(&$value){} 

私は未定義のインデックスエラーをスローするtest_valuetest_referenceの両方を期待していたが、妙に参照による方法は、任意のエラーをスローしません。

なぜですか?

答えて

5

関数参照パラメータは、以前に宣言されていない変数を受け入れます。彼らは参照としてそれらを渡すことによって宣言されています。

$foo = preg_match('/(.)/', 'bar', $baz); 

この機能戻り$fooに割り当てられる一つの値、:あなたは、参照によるパラメータの典型的な使用例を見ればこれは完全に理にかなっています。ただし、この関数は一致を返す必要があります。これはここでは3番目のパラメータ$bazです。関数は一度に1つの値しか返すことができないので、参照によって渡された変数を設定することによって、追加の "戻り値"が実現されています。あなたはこれらの変数を事前に初期化する必要があった場合

、あなたのコードは次のようになります。

$baz = null; 
$foo = preg_match('/(.)/', 'bar', $baz); 
echo $baz[0]; 

これは、必要以上に複雑なコードになります。したがって、PHPはそのような変数が "存在する"ことを事前に要求していません。