2017-12-30 15 views
0

私は範囲のオフセットのパッドのうちに書き込み警告私は[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の出力の違いを示してください。その違いを理解することは私にとっては良いことです。

答えて

3

空の文字列を割り当てたり、範囲外のオフセットを使用したりしていません。

<?php 
$rootbeer = 'A & W'; 
$rootbeer[7] = ''; 
echo $rootbeer; 

これはPHP 5.6と出力ドキュメントに記載パディングされた文字列で正常に動作します:私はあなたがこのようなルックスを試してみたいコードを信じています。

PHP 7.1以降では、警告が表示されます

PHPの警告:ライン3

にyourfile.phpにオフセット文字列に空の文字列を割り当てないと、文字列はしませんことができます変更される。

+0

私はこのことを知っています。このマニュアルでは、> "PHP 7.1.0以降、空の文字列を割り当てると致命的なエラーが発生しますが、あなたのコードでは単に警告を出すだけです。コードでは致命的なエラーが発生していることを示していません。 – user2839497

+1

それは確かに謎です。私は[PHPインタプリタ](https://github.com/php/php-src/)のソースを見て、この警告はバージョン7.1で実際に導入されました。実装に同意しないのですか?私は、動作の変更が正しいバージョンで起こったという奇妙な偶然として私を襲ってきます。 – jsfan

+0

あなたのご了承いただきありがとうございます。 .0、空のインデックス演算子を文字列に適用すると致命的なエラーが発生します。 – user2839497

関連する問題