31

PHPでは、error_reporting通知を含むすべてを報告するように設定しています。

以下が通知、エラー、またはその他のものをスローしないのはなぜですか?

$myarray = null;
$myvalue = $myarray['banana'];

トラブルシューティングの手順:

$myarray = array();
$myvalue = $myarray['banana'];
// throws a notice, as expected ✔

$myarray = (array)null;
$myvalue = $myarray['banana'];
// throws a notice, as expected ✔

$myarray = null;
$myvalue = $myarray['banana'];
// no notice or warning thrown, $myvalue is now NULL. ✘ Why?

PHP のバグである可能性があります。または、これがどのように機能するかについて理解していないだけです。

4

3 に答える 3

10

通常、ある型の値を別の型であるかのように使用しようとすると、エラーまたは警告がスローされるか、「型ジャグリング」が発生します。たとえば、2 つの数値を で連結しようとすると.、両方とも強制的に文字列になり、連結されます。

ただし、型ジャグリングに関するマニュアルページで説明されているように、配列のように非配列を扱う場合はそうではありません:

配列への自動変換の動作は現在未定義です。

実際には、この「未定義の動作」が非配列の逆参照によってトリガーされたときに発生する動作はnull、観察したように返されます。これは null だけに影響するわけではありませんnull。数値またはリソースを逆参照しようとした場合にも発生します。

于 2012-06-12T05:15:35.487 に答える
8

2006 年に開始されたアクティブなバグ レポートがあります。

ドキュメントでは、これについての通知がStringセクションにあります。 ここに画像の説明を入力

于 2016-08-04T15:22:05.093 に答える