私は範囲のオフセットのパッドのうちに書き込み警告私は[PHPマニュアルの文字列の章]から以下の混乱のテキストに遭遇[1]このコンテキストで「空の文字列を割り当てる」とはどういう意味ですか?
をPHP 7.1.0
を使用しています文字列にはスペースを入れます。 非整数型は整数に変換されます。不正なオフセットタイプは、 E_NOTICEを発します。割り当てられた文字列の最初の文字のみが使用されます。 PHP 7.1.0の として、空の文字列を割り当てると致命的なエラーが発生します。 以前はNULLバイトが割り当てられていました。
私は、「割り当てられた文字列の最初の文字のみが使用されている。」上記のテキストから
の句の意味を理解するために懸命に試みました
と
"PHP 7.1.0のように、空の文字列を代入すると、致命的なエラーをスロー。 以前、それはNULLバイトを割り当てました。"
上記2つのステートメントの最初のステートメントは全くわかりません。
2番目のステートメントでは、実際のコードで理解しようとしました。だから、私は次のコードを書いたが、このコードがマニュアルのステートメントが言いたいことを実証しているかどうかは分からない。以下は私のコードスニペットです。それで、文を正しく理解しているかどうか、PHPのマニュアルからその文の意味を正しく示すかどうかをコードに正しく書いたかどうかを教えてください。私が間違っている場合は、PHPマニュアルのステートメントに準拠するようにコードを修正してください。
コードスニペット:PHP 7.1.0で
<?php
$rootbeer = 'A & W';
$rootbeer[] = 'N';
?>
出力:PHP 5.6.30で
Fatal error: Uncaught Error: [] operator not supported for strings in hello.php:3 Stack trace: #0 {main} thrown in hello.php on line 3
出力:
Fatal error: [] operator not supported for strings in hello.php on line 3
上記の2つの出力から、どこにも表示されませんPHP 5.6.30そのNULLバイトが何かに割り当てられています。両方のバージョンと同じように、私はほとんど同じ出力、同じエラーを得ています。
PHP 7.1.0とPHP 5.6.30の出力の違いを示してください。その違いを理解することは私にとっては良いことです。
私はこのことを知っています。このマニュアルでは、> "PHP 7.1.0以降、空の文字列を割り当てると致命的なエラーが発生しますが、あなたのコードでは単に警告を出すだけです。コードでは致命的なエラーが発生していることを示していません。 – user2839497
それは確かに謎です。私は[PHPインタプリタ](https://github.com/php/php-src/)のソースを見て、この警告はバージョン7.1で実際に導入されました。実装に同意しないのですか?私は、動作の変更が正しいバージョンで起こったという奇妙な偶然として私を襲ってきます。 – jsfan
あなたのご了承いただきありがとうございます。 .0、空のインデックス演算子を文字列に適用すると致命的なエラーが発生します。 – user2839497