2016-12-23 4 views
0

は私の例である:私はis($data['test'])を実行した後、$data$data['test'] = nullPHP、NULL変数のキーチェックが設定され、どのように?ここ

任意のアイデアなぜこの動作になっていること

$data = null; 

var_dump($data); // returns null 

is($data['test']); 

var_dump($data); // returns array (size=1) 
       //   'test' => null 

function is(&$var, $default = null) 
{ 
    return isset($var) ? $var : $default; 
} 

予告?

私はnullを取得しようとしています。私は、PHP 7

編集を実行しています:それは、なぜその結果をもたらすであろう

+0

最初の引数を参照渡ししないとうまくいくことに注意してください。 'function is($ var、$ default = null)' –

+0

@FredBええ、そうですが、時々私は通知を受け取ります – Patrioticcow

答えて

0

値が関数に渡されますので、あなたが(でも参照して)機能に非既存のキーを使用して変数を渡すことはできません。

$dataがあり、次の行に$data['test']を入力すると、$data変数が配列に更新されます。

したがって、is($data['test']);を使用すると、変数が更新されます。

次に、関数に移り、isset($var)をチェックします。変数はすでに更新されているので、すでに設定されています。だからissettrueの返品を得る。その戻り値には、更新された変数$data['test']が含まれます。

この場合、@Fred Bのソリューションがうまくいくと思います。

+0

' $ data ['test '] 'が最初に評価される – Patrioticcow

0

は(array_key_existsを使用してみてくださいだけでわからない&シンボル、)だと鍵が見つからない場合はnullを返します。

+0

は動作しません。 '$ data'は配列ではありません – Patrioticcow

0

このソリューションは、しかしあまりエレガントで、動作しているようです:

is($data, 'test'); 

var_dump($data); // returns array (size=1) 
       //   'test' => null 

function is($var, $key, $default = null) 
{ 
    return isset($var[$key]) ? $var[$key] : $default; 
} 
+0

ええ、キーや変数が存在するかどうかをチェックする方法は分かりますが、多くの方法があります。特に'& 'シンボルについて疑問がありました – Patrioticcow

関連する問題