53

PHPトリビアはこちら

次のように配列を宣言すると:

<?php $arr = [ 'foo' => 'bar', NULL => 'hello' ]; ?>

このようにアクセスできます

print $arr[NULL];

これは印刷されますhello。なぜこれが有用、関連性、または必要なのですか? それはPHPのバグですか、それとも機能ですか?

私の唯一の考えは、NULLキーを使用する人にキーがnullであることを説明するエラーメッセージと等しいNULLキーで配列を宣言できるということでした:

$arr[NULL] = 'Warning you have used a null key, did you mean to?';

誰もこれが便利だと思いましたか? 善よりも害をもたらすもののようです。

4

3 に答える 3

68

マニュアルからの引用:

Null は空の文字列にキャストされます。つまり、キー null は実際には "" の下に格納されます。

キーのキャスト方法に関する追加の詳細は次のとおりです。

キーは整数または文字列のいずれかです。値は任意の型にすることができます。

さらに、次のキー キャストが発生します。

  • 数値の前に + 記号が付いていない限り、有効な 10 進整数を含む文字列は整数型にキャストされます。たとえば、キー "8" は実際には 8 の下に格納されます。一方、"08" は有効な 10 進整数ではないため、キャストされません。
  • 浮動小数点も整数にキャストされます。これは、小数部分が切り捨てられることを意味します。たとえば、キー 8.7 は実際には 8 の下に格納されます。
  • bool も整数にキャストされます。つまり、キー true は実際には 1 の下に格納され、キー false は 0 の下に格納されます。
  • Null は空の文字列にキャストされます。つまり、キー null は実際には "" の下に格納されます。
  • 配列とオブジェクトはキーとして使用できません。これを行うと、次の警告が表示されます: Illegal offset type.

これが有用か必要かについては、議論の余地があります。整数キーまたは文字列キーを使用するように求められ、暗黙のキー キャストについて警告されています。

于 2013-08-15T06:30:11.153 に答える
5

連想 PHP 配列が入力されたフォーム API を考えると、データベース内の NULL 値を示すために null キー付きの値を使用すると便利であることがわかりました。例えば:

$this->addElement('select', 'foreignkey_id', array(
  'label'=>'Add a Poll',
  'multiOptions' => array(
      null => 'No value selected',
      '0' => 'Element with ID0 selected'
  )
));

この場合、null はデータベース列foreignkey_id の NULL (デフォルト) 値にマップされ、0 はキー 0 の行にマップされます。

ただし、この特定のユースケース以外では、ここでは DCoder のコメントが信頼できると考える傾向があります...

于 2015-10-11T14:29:24.227 に答える