在这种情况下“分配空字符串”的含义是什么?

时间:2017-12-30 02:11:07

标签: php string offset fatal-error php-7.1

我正在使用 PHP 7.1.0

我遇到了[PHP手册的字符串章节] [1]

中令人困惑的文字
  

警告写入超出范围的偏移量会填充带有空格的字符串。   非整数类型转换为整数。非法偏移类型发出   的 E_NOTICE 即可。仅使用指定字符串的第一个字符。如   在PHP 7.1.0中,分配一个空字符串会引发致命错误。   以前,它分配了一个NULL字节。

我努力理解上述文本中的条款含义

  

“仅使用指定字符串的第一个字符。”

  

“从PHP 7.1.0开始,分配一个空字符串会引发致命错误。   以前,它分配了一个NULL字节。“

我完全不理解上述两个陈述中的第一个陈述。

对于第二个陈述,我试图通过实际代码来理解它。所以,为此,我编写了以下代码,但我不确定此代码是否演示了手册中的声明要说的内容。以下是我的代码段。从中,告诉我是否正确理解语句并正确编写代码或不用来演示PHP手册中语句的含义。如果我做错了,请相应地更正我的代码,以符合PHP手册中的陈述。

代码段:

<?php 
$rootbeer = 'A & W';
$rootbeer[] = 'N';
?>

PHP 7.1.0中的输出:

Fatal error: Uncaught Error: [] operator not supported for strings in hello.php:3 Stack trace: #0 {main} thrown in hello.php on line 3

PHP 5.6.30输出:

Fatal error: [] operator not supported for strings in hello.php on line 3

从以上两个输出中我看不到 PHP 5.6.30 中的任何地方 NULL byte 被分配给某个东西。与两个版本一样,我得到几乎相同的输出,同样的错误。

请演示 PHP 7.1.0 和PHP 5.6.30 的输出之间的差异。因此,了解差异会更好。

1 个答案:

答案 0 :(得分:3)

您没有分配空字符串,也没有使用超出范围的偏移量。我相信你想要尝试的代码如下:

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

这在PHP 5.6中可以正常工作,并输出文档中提到的填充字符串。

在PHP 7.1+中,您将收到警告

  

PHP警告:无法将空字符串分配给第3行的.filep中的字符串偏移量

并且不会改变字符串。